Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态linq查询-属性为null的OrderBy_C#_Linq - Fatal编程技术网

C# 动态linq查询-属性为null的OrderBy

C# 动态linq查询-属性为null的OrderBy,c#,linq,C#,Linq,我在这里使用按字符串扩展排序: 在我的数据源中,一些对象可能是空的,因此没有EHR属性(参见屏幕截图) 我怎样才能抓住这个案子?我仍然希望空值包含在有序列表中,但只在底部或顶部 有什么建议吗 编辑:进一步澄清。 因此,我的KendoUI网格正在向服务器发回一个请求,以按特定列排序。orderby选择的列是“Month10.EHR”。Month10是子对象,EHR是属性。某些子对象不存在,因此没有属性,并且该子对象将为null。在执行排序时,它注意到Month10对于一条记录不存在,因此不能将其

我在这里使用按字符串扩展排序:

在我的数据源中,一些对象可能是空的,因此没有EHR属性(参见屏幕截图)

我怎样才能抓住这个案子?我仍然希望空值包含在有序列表中,但只在底部或顶部

有什么建议吗

编辑:进一步澄清。

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

我希望这是有道理的

迈克


使用
Where
删除具有空顺序键的元素,然后使用
Concat
再次添加它们

例如

IEnumerable列表myList;
// ...
var orderedList=myList
.Where(p=>p.Age!=null)
.OrderBy(p=>p.Age)
.Concat(myList.Where(p=>p.Age==null));

再次阅读您的问题,您的意思似乎是正在排序的实际元素为空。在这种情况下,将它们包含在列表中有什么意义?

在OrderBy函数中测试
null

IEnumerable<SomeType> myList;
// ...
var orderedList = myList.OrderBy(obj =>
                    obj == null 
                    || obj.Month10 == null 
                  ? defaultValue : obj.Month10.EHR);
IEnumerable myList;
// ...
var orderedList=myList.OrderBy(obj=>
obj==null
||obj.Month10==null
?默认值:目标月10日EHR);

调用扩展名的代码要比ordering helper中的代码更有用,以查看您正在尝试执行的操作。我认为这接近我需要的功能,只是我使用带有反射的propertyname字符串进行排序,而不是使用固定类型(即年龄)。不太确定如何使其动态工作您是否尝试过在所有元素都存在Month10.EHR的集合中使用它?我已经进一步澄清了我的问题。我正在尝试对子对象的属性进行排序,但该子对象可能不存在。我使用动态linq和反射来传递列名,所以这并不是我想要做的。然而,EHR并不是他们可以单击的唯一列。共有12列。例如,月1.EHR,月2.EHR等。我想我必须检查所有这些?
IEnumerable<SomeType> myList;
// ...
var orderedList = myList.OrderBy(obj =>
                    obj == null 
                    || obj.Month10 == null 
                  ? defaultValue : obj.Month10.EHR);