不了解LINQ查询

时间:2015-10-15 12:30:23

标签: c# linq

我正在维护一个项目,并且遇到了一些我无法理解的代码。 LINQ查询:

var toDraw = from tile in testArr.AsEnumerable()
             where tile.Item_Business_Unit != null ? 
             ((tile.Ending_Date >= DateTime.Now || tile.Ending_Date == DateTime.MinValue) && 
             ((tile.Sales_Code == null) || (tile.Sales_Code.ToString() == customerNumber) || 
             (tile.Sales_Code.ToString() == cpg)) && (tile.Unit_Price != 0)) : 
             ((tile.Ending_Date >= DateTime.Now || tile.Ending_Date == DateTime.MinValue) && 
             ((tile.Sales_Code == null) || (tile.Sales_Code.ToString() == customerNumber) || 
             (tile.Sales_Code.ToString() == cpg)) && (tile.Unit_Price != 0))
                             select tile;

根据我的理解,从数组中选择一个具有以下标准的图块:

  • 结束日期可以是datetime.nowdatetime.minvalue
  • 销售代码可以为null,也可以等于customer no或cpg
  • 单价应大于0

但是我不明白为什么在tile.Item_Business_Unit之后存在条件表达式,因为两个条件都执行相同的操作。即使它有一个空业务单位,项目也会被选中吗?这是否与正常的if / else操作不同?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:3)

您是否被快捷方式符号抛出?

x = (test_case) ? (true_part) : (false_part);

如果test_case评估为 true ,则可以

true_part

如果test_case评估为 false ,则会对此表达式进行评估

false_part

<强>更新

作为一个FYI:上面条件表达式双方的结果测试是相同的,所以甚至不需要神秘的代码。

您可以将其替换为:

var toDraw = from tile in testArr.AsEnumerable()
    where 
    ((tile.Ending_Date >= DateTime.Now || tile.Ending_Date == DateTime.MinValue) &&
    ((tile.Sales_Code == null) || (tile.Sales_Code.ToString() == customerNumber) || (tile.Sales_Code.ToString() == cpg)) &&
    (tile.Unit_Price != 0)) 
    select tile;