如何解决Linq OrderBy与表达式变量
我试图弄清楚如何按变量而不是字符串排序。
我相信我应该能够表示x => x.SomeProperty
并将其保存到变量中并将其传递到OrderBy
方法中,但无法弄清楚在这里使用什么。
SomeType sortExpr = null;
switch(sortByColumnName)
{
case "Name":
sortExpr = x => x.Name
break;
case "Age":
sortExpr = x => x.Age
break;
case "OtherThing":
sortExpr = x => x.OtherReference.Name
break;
}
if (sortDirection == "asc")
query = query.OrderBy(sortExpr);
else
query = query.OrderByDescending(sortExpr);
解决方法
如上所述,Border
接受OrderBy
作为其参数,因此Func<TSource,TKey> keySelector
应该是该类型的,其中sortExpr
是对象,存储在要存储的集合中排序,例如TSource
类。 User
是您要排序的属性类型,由于它可以是任意类型,因此可以将其设为TKey
,因为此类型参数是协变的。
所以声明像
object
其余代码可以保持不变。
编辑
如果您使用的Func<User,object> sortExpr;
版本需要IQueryable<TSource>.OrderBy
,则只需将变量delare为:
Expression<Func<TSource,TKey>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。