【问题标题】:LINQ - Sorting by using OrderBy on a nullable fieldLINQ - 在可为空的字段上使用 OrderBy 进行排序
【发布时间】:2013-02-12 20:24:20
【问题描述】:

我正在尝试通过在可为空的 Int32 字段上使用 LINQ 的 OrderBy 方法对 Enumerable<DataRow> 类型的集合进行排序。由于此字段的某些值为空,Visual Studio 会引发 System.ArgumentException,并带有消息“对象必须是 Int32 类型。”这是有问题的代码行:

collection1 = collection1.OrderBy(row => row["Column1"]); 

其中 Column1 是可为空的 Int32 字段,变量 collection1 声明为:

IEnumerable<DataRow> collection1;

有没有办法重写上面的行,使其忽略空值?

【问题讨论】:

    标签: linq


    【解决方案1】:

    您可以使用三元条件运算符:

    collection1 = collection1.OrderBy(row => 
      row["Column1"] != null ? row["Column1"] : low_priority_indicator); 
    

    其中low_priority_indicator 是一个整数,表示标准的低阶(相对于您的优先级)值。否则,如果您想从结果集合中完全排除,您可以在 排序之前过滤掉 null 值。

    【讨论】:

      【解决方案2】:

      试试这个:

      collection1.OrderBy(row => row.Field<int?>("Column1")); 
      

      【讨论】:

        【解决方案3】:

        尝试以下方法:

        collection1 = collection1.Where(row => row["Column1"] != null).
            OrderBy(row => row["Column1"]);
        

        【讨论】:

          【解决方案4】:

          这将忽略这些值 - 试试这个:

          collection1 = collection1
                          .Where(c => c["Column1"].HasValue)
                          .OrderBy(row => row["Column1"]);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-01
            • 2021-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多