【问题标题】:Zero if Null in Linq Select [duplicate]如果在 Linq Select 中为 Null,则为零 [重复]
【发布时间】:2017-12-26 19:56:02
【问题描述】:

我需要一些关于 Linq 语句的语法帮助。整个语句很长,并且针对我无法控制的 SQL Server 数据库进行选择。

在我选择的新短语中,我有以下列;

              on_Hand_Qty1 = (from x1 in Material_Locations
                             where x1.Material == j.Part_Number
                                 && x1.Location_ID != "MSSICONSMT"
                             select x1.On_Hand_Qty ?? 0.0).Sum()
                             ,

在 LINQPad 中,我收到以下错误: 操作员 '??'不能应用于'double'和'double'类型的操作数

我正在使用 ??因为子查询有可能不返回任何记录。在这种情况下,该值应为零。

我尝试将值强制转换为 (double) 和 (double?),但我仍然有效地得到相同的错误。 j

我在语句中其他地方的列上进行了类似的子选择,它工作正常;

                  Consignment = (from x in Material_Locations
                                     where x.Material == j.Part_Number
                                         && x.Location_ID == "MSSICONSMT"
                                     select(float?) x.On_Hand_Qty ?? 0.0 ).ToList()

我在这里错过了什么?

谢谢!

【问题讨论】:

  • 您正在将?? 应用于一行。如果查询没有返回任何行,它不会将缺少的行转换为零。

标签: c# sql-server linq linqpad


【解决方案1】:

感谢您帮助查找参考资料。我不知道如何用谷歌搜索它。

这种语法可以正常工作。

                  on_Hand_Qty1 = Material_Locations
                                .Where (ml => ml.Material == j.Part_Number && ml.Location_ID != "MSSICONSMT" )
                                .Sum (ml => (double?)ml.On_Hand_Qty) ?? 0,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多