Linq声明:排序依据

利宾·约瑟夫(Libin Joseph)

我有一个从Web API请求返回的对象的列表。每个对象都有一个名为“ PlaceNo”的字段,该字段的值可以为0到n;如果尚未分配值,则可以为-1。

我需要对基于PlaceNo的列表进行排序,该列表需要为0到n,然后是所有-1。

allreports.OrderBy(x => Convert.ToInt32(x.PlaceNo)).ToList();

当前代码首先给出所有-1,然后给出0至n。

注意:我正在对PlaceNo进行类型转换,因为数字是以字符串而不是整数形式传递的。

埃里克·利珀特(Eric Lippert)

解决此问题的正确方法是依次查询。尽管其他答案的建议(将负数转换为最大int)可能会起作用,但最佳实践是编写代码,使其实际上代表您尝试在代码中捕获的操作。在这种情况下,您有两个排序条件,因此查询中应该有两个排序条件!

您想要做的是首先对“整数-1?”进行排序。也就是说,按布尔订购默认的顺序是false出现在true之前,因此,如果您希望-1排在最后,请检查整数是否等于-1。

那应该是您的order-by子句。那么,by-by子句就是您的常规排序方式-按整数值。

var query = from report in allreports
            let place = Convert.ToInt32(report.PlaceNo) 
            orderby place == -1, place 
            select report;
var list = query.ToList();

有道理?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章