Возврат одного значения с помощью 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
.