我使用List<>填充了listview对象我已经在SO上阅读了如何使用LINQ对列表进行排序:
List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();
哪个好,但我的ListView有一堆列,我想使用与上面不同的系统进行排序,但是能够从传递的任何命令参数中获取排序值。
所以,例如上面的代码按OrderDate排序,如果我传入'Name'或'Amount'或其他东西怎么办。没有很长的if-else是否有一个很好的方法可以根据作为sort参数传递的值来改变LINQ查询?
答案 0 :(得分:1)
您可以OrderBy
对string
的财产var strSort = "Name";
List<Order> SortedList = objListOrder.OrderBy(o=>o.GetType().GetProperty(strSort).GetValue(o, null)).ToList();
进行var strSort = "Name";
var query = objListOrder;
if(strSort == "OrderDate")
query = query.OrderBy(o=>o.OrderDate);
else if(strSort == "Name")
query = query.OrderBy(o=>o.Name);
else if(strSort == "Amount")
query = query.OrderBy(o=>o.Amount);
List<Order> SortedList = query.ToList();
:
{{1}}
但我更愿意将查询分开:
{{1}}