2

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

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

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

IEnumerable<DataRow> collection1;

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

4

4 回答 4

7

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

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

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

于 2013-02-12T12:08:25.713 回答
4

试试这个:

collection1.OrderBy(row => row.Field<int?>("Column1")); 
于 2013-02-12T12:24:20.990 回答
0

尝试以下操作:

collection1 = collection1.Where(row => row["Column1"] != null).
    OrderBy(row => row["Column1"]);
于 2013-02-12T12:08:05.447 回答
0

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

collection1 = collection1
                .Where(c => c["Column1"].HasValue)
                .OrderBy(row => row["Column1"]);
于 2013-02-12T12:08:38.010 回答