Yan*_*nis 27 c# linq sorting iqueryable c#-4.0
我目前正在使用IQueryable OrderBy方法订购自定义对象列表,如下所示:
mylist.AsQueryable().OrderBy("PropertyName");
Run Code Online (Sandbox Code Playgroud)
现在我希望按多个属性排序.有没有办法做到这一点?
谢谢,Yannis
Nik*_*lay 53
OrderBy(i => i.PropertyName).ThenBy(i => i.AnotherProperty)
Run Code Online (Sandbox Code Playgroud)
在OrderBy和ThenBy中,你必须提供keySelector函数,它选择从对象中排序的键.因此,如果您只在运行时知道属性名称,那么您可以使用反射来创建这样的函数:
var propertyInfo = i.GetType().GetProperty("PropertyName");
var sortedList = myList.OrderBy(i => propertyInfo.GetValue(i, null))
Run Code Online (Sandbox Code Playgroud)
但它会慢,然后直接进入财产.你也可以使用Linq.Expressions"动态"编译这样的函数,它比反射更快,但不是很容易.或者您可以在WPF中使用CollectionViewSource及其排序功能.
并且不要忘记OrderBy()返回已排序的枚举,并且它不会对现有的List进行排序.在您的示例中,您没有将排序列表保存到变量.
Dar*_*rov 13
你可以使用.ThenBy:
var result = mylist
.AsQueryable()
.OrderBy(x => x.PropertyName)
.ThenBy(x => x.SomeOtherProperty);
Run Code Online (Sandbox Code Playgroud)
您可能希望使用ThenBy扩展方法能够按多个字段排序
return myList.AsQueryable().OrderBy(m=>m.Property1).ThenBy(m => m.Property2);
Run Code Online (Sandbox Code Playgroud)
如果你想要动态Linq,请看LinqKit.我最近从这里实现了Microsoft的动态Linq库,并且能够使用字符串对两个字段进行排序.
太棒了!不确定这是否在.NET 5中.
| 归档时间: |
|
| 查看次数: |
27826 次 |
| 最近记录: |