dynamic linq query - 具有null属性的OrderBy

时间:2013-05-07 07:05:53

标签: c# linq

我正在使用此处的Ordering-By-String扩展: http://blog.cincura.net/229310-sorting-in-iqueryable-using-string-as-column-name/

在我的数据源中,某些对象可能为null,因此不具有EHR属性(参见屏幕截图)。

我如何捕获此案例?我仍然希望空值包含在有序列表中,但只是在底部或顶部。

有什么建议吗?

编辑:更多澄清......

所以我的KendoUI网格正在向服务器发回一个请求,以便按特定列进行排序。选择为orderby的列是“Month10.EHR”。 Month10是SubObject,EHR是属性。某些SubObjects不存在,因此没有属性,子对象将为null。执行排序时,它注意到一个记录不存在Month10,因此不能将其包含在orderby中。

我希望这是有道理的。

麦克

Error

2 个答案:

答案 0 :(得分:1)

使用Where删除具有空订单键的元素,然后使用Concat将其重新添加。

E.g。

IEnumerable List<Person> myList;
// ...
var orderedList = myList
    .Where(p => p.Age != null)
    .OrderBy(p => p.Age)
    .Concat(myList.Where(p => p.Age == null));

再次阅读您的问题,您似乎意味着要排序的实际元素为空。在这种情况下,将它们列入清单的重点是什么?

答案 1 :(得分:1)

在OrderBy函数中测试null

IEnumerable<SomeType> myList;
// ...
var orderedList = myList.OrderBy(obj =>
                    obj == null 
                    || obj.Month10 == null 
                  ? defaultValue : obj.Month10.EHR);