【问题标题】:How to write SQL IsNull() in Linq? [duplicate]如何在 Linq 中编写 SQL IsNull()? [复制]
【发布时间】:2012-03-20 16:23:45
【问题描述】:

可能重复:
Equivalent of SQL ISNULL in LINQ?

我最近从ADO.Net 迁移到Entity Framework

我在 Linq 中执行此查询时遇到问题

select IsNull(MAX(InvoiceNo),0) from Sales

我已经在 LINQ 中编写了这个查询,除了 isNull()

        var q = (from p in dbContext.Sales
                 select p.InvoiceNo).Max();

但我不知道如何在这个 Linq 中使用 IsNull()

当我执行这个 Linq 查询时,我得到了这个异常。

'对类型的构造函数的调用 与指定匹配的“JIMS.ViewModel.Transaction.SalesViewModel” 绑定约束引发了异常。行号“8”和行 位置“6”。

我正在使用 WPF MVVM 框架和实体框架作为 DAL

【问题讨论】:

    标签: .net wpf linq entity-framework linq-to-entities


    【解决方案1】:
    var InvoiceNo = dbContext.Sales.Max(x => (int?)x.InvoiceNo) ?? 0;
    

    【讨论】:

    • 这也是Linq还是匿名方法
    • ?? 仅适用于可为空的 int int? 所以它会抛出异常
    • 如果底层类型不可为空,只需将其转换为可空对象 (int?)x.InvoiceNo
    • Lambda Express 或 Linq 哪个更快
    • 其实都是linq,一个是查询语法,一个是lambda语法。性能是一样的。
    【解决方案2】:

    试试这个:

    var q = (from p in dbContext.Sales
                     select (int?)p.InvoiceNo).Max();
    

    【讨论】:

      【解决方案3】:

      如果 invoicno 为空,则必须选择零。您可以这样做的一种方法是:

      var elements = (from p in dbContext.Sales
                       where p.InvoiceNo != null
                       select p.InvoiceNo).Max();
      

      假设总会有至少一张发票,否则你可以这样做

      var elements = (from p in dbContext.Sales
                       select p.InvoiceNo ?? 0).Max();
      

      它必须比较所有元素,因此它可能比第一种方法慢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多