我有一个从Web API请求返回的对象的列表。每个对象都有一个名为“ PlaceNo”的字段,该字段的值可以为0到n;如果尚未分配值,则可以为-1。
我需要对基于PlaceNo的列表进行排序,该列表需要为0到n,然后是所有-1。
allreports.OrderBy(x => Convert.ToInt32(x.PlaceNo)).ToList();
当前代码首先给出所有-1,然后给出0至n。
注意:我正在对PlaceNo进行类型转换,因为数字是以字符串而不是整数形式传递的。
解决此问题的正确方法是依次查询。尽管其他答案的建议(将负数转换为最大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] 删除。
我来说两句