【问题标题】:Returning a single value with Linq to SQL使用 Linq to SQL 返回单个值
【发布时间】:2010-12-05 09:14:10
【问题描述】:

我正在学习 Linq to SQL,但我无法掌握它。我正在尝试使用 Linq 查询在 C# 中简单地返回单个(布尔)值。

我想看看故事的所有者是否希望在添加新的 cmets 时发送电子邮件通知。我希望包含 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;

【问题讨论】:

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


    【解决方案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.
    

    【讨论】:

    • +1。实际上,与我相比,您得到了一个可行的解决方案:-)
    【解决方案3】:
    var notify = (from s in db.AccountSettings
                  where s.UserName == username
                  select s.NotifyOnComment).Count();
    
    return  Convert.ToBoolean(notify);
    

    【讨论】:

      【解决方案4】:

      如果您只期望一个结果,只需使用 SingleSingleOrDefault 即可获得布尔值。如果您想要第一个结果,您可以使用FirstFirstOrDefault

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多