使用Linq将单个值返回到SQL

时间:2009-10-09 14:55:26

标签: asp.net asp.net-mvc linq linq-to-sql

我正在学习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;

4 个答案:

答案 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)

如果您只想使用一个结果,只需使用SingleSingleOrDefault即可获得bool。如果您想要第一个结果,可以使用FirstFirstOrDefault