LINQ - 在可空字段上使用OrderBy进行排序

时间:2013-02-12 12:04:29

标签: linq

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

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

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

IEnumerable<DataRow> collection1;

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

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

试试这个:

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

答案 2 :(得分:0)

尝试以下方法:

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

答案 3 :(得分:0)

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

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