Lib*_*eph 1 c# linq lambda c#-4.0
我有一个从web api请求返回的对象列表.每个对象都有一个名为"PlaceNo"的字段,其值可以为0到n,如果尚未分配值,则为-1.
我需要根据PlaceNo排序列表,其中需要为0到n,然后是所有-1.
allreports.OrderBy(x => Convert.ToInt32(x.PlaceNo)).ToList();
Run Code Online (Sandbox Code Playgroud)
当前代码首先给出所有-1,然后是0到n.
注意:我在PlaceNo上进行类型转换,因为数字是以字符串而不是整数形式传递的.
解决此问题的正确方法是按顺序执行查询.虽然其他答案的建议 - 将负数转换为最大值 - 可能会有效,但最佳做法是编写代码,使其实际代表您尝试在代码中捕获的操作.在这种情况下,您有两个排序条件,因此您应该在查询中有两个排序条件!
你想要做的是先做一个"是整数-1?"的订单.也就是说,对布尔数量的顺序.默认排序是false在true之前,所以如果你想要-1最后排序,检查整数是否等于-1.
那应该是你的订单条款.然后,then-by子句是您的正常排序 - 按整数值.
var query = from report in allreports
let place = Convert.ToInt32(report.PlaceNo)
orderby place == -1, place
select report;
var list = query.ToList();
Run Code Online (Sandbox Code Playgroud)
合理?