Возврат единственного значения с Linq в SQL - PullRequest
14 голосов
/ 09 октября 2009

Я изучаю Linq для SQL, и мне трудно понять его. Я пытаюсь просто вернуть одно (логическое) значение в C # с помощью запроса Linq.

Я хочу узнать, хочет ли владелец истории отправлять уведомления по электронной почте при добавлении новых комментариев. Я хотел бы, чтобы метод, содержащий Linq to SQL, возвращал логическое значение.

 public bool NotifyOnComment(string username){
        var notify = (from s in db.AccountSettings
                      where s.UserName == username
                      select s.NotifyOnComment).DefaultIfEmpty(false);

        // clueless
    }

Обновление:

Сейчас я делаю следующее:

var notify = (from s in db.AccountSettings
                      where s.UserName == username
                      select s.NotifyOnComment).SingleOrDefault();

        return (bool)notify;

Ответы [ 4 ]

29 голосов
/ 09 октября 2009

Linq, по умолчанию всегда возвращает коллекции. Если вам нужно одно значение, вы можете применить .Single(), .SingleOrDefault() или .First() или .FirstOrDefault() методы.

Они немного отличаются в том, что они делают. Single() и SingleOrDefault() будут работать только в том случае, если в результате точно или не более одной записи. First() и FirstOrDefault() будут работать, даже если есть больше результатов.

Варианты *OrDefault() возвращают значение по умолчанию для типа, если результат не содержит записей.

9 голосов
/ 09 октября 2009
var notify = (from s in db.AccountSettings
              where s.UserName == username
              select s.NotifyOnComment).DefaultIfEmpty(false).First();

//notify will either hold a bool or the AccountSettings object so
return (!(notify == false)); // Thanks Nick. Amazing what you'll do in a hurry.
4 голосов
/ 27 сентября 2011
var notify = (from s in db.AccountSettings
              where s.UserName == username
              select s.NotifyOnComment).Count();

return  Convert.ToBoolean(notify);
1 голос
/ 09 октября 2009

Если вы ожидаете только один результат, просто используйте Single или SingleOrDefault, чтобы получить bool. Если вы хотите первый результат, вы можете использовать First или FirstOrDefault.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...