我正在尝试在可空的Int32字段上使用LINQ的OrderBy方法对类型Enumerable<DataRow>
的集合进行排序。由于此字段的某些值为null,因此Visual Studio会抛出System.ArgumentException,并显示消息“Object必须是Int32类型”。这是有问题的代码行:
collection1 = collection1.OrderBy(row => row["Column1"]);
其中Column1是可空的Int32字段,变量collection1
声明为:
IEnumerable<DataRow> collection1;
有没有办法重写上面的行,以便忽略空值?
答案 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"]);