我正在学习Linq to SQL,我很难理解它。我试图用Linq查询简单地在C#中返回一个(布尔值)值。
我想查看故事的所有者是否希望在添加新评论时发送电子邮件通知。我想包含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;
答案 0 :(得分:29)
Linq,默认情况下始终返回集合。如果您需要单个值,则可以应用.Single()
,.SingleOrDefault()
或.First()
或.FirstOrDefault()
方法。
他们的所作所为略有不同。 Single()
和SingleOrDefault()
仅在结果中完全或最多一条记录时才有效。即使有更多结果,First()
和FirstOrDefault()
也会有效。
如果结果中没有记录,*OrDefault()
变体将返回该类型的默认值。
答案 1 :(得分:9)
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.
答案 2 :(得分:4)
var notify = (from s in db.AccountSettings
where s.UserName == username
select s.NotifyOnComment).Count();
return Convert.ToBoolean(notify);
答案 3 :(得分:1)
如果您只想使用一个结果,只需使用Single
或SingleOrDefault
即可获得bool。如果您想要第一个结果,可以使用First
或FirstOrDefault
。