Возврат одного значения с помощью Linq to SQL

Я изучаю Linq для SQL, и у меня проблемы с этим. Я пытаюсь просто вернуть одно (булево) значение в С# с запросом 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
    }

Update:

Теперь я делаю следующее:

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

        return (bool)notify;

Ответы

Ответ 1

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

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

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

Ответ 2

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.

Ответ 3

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

return  Convert.ToBoolean(notify);

Ответ 4

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