[英]Linq OrderBy with an expression variable
我試圖弄清楚如何按變量而不是字符串進行排序。 我相信我應該能夠表示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);
正如已經說過的, OrderBy
接受Func<TSource,TKey> keySelector
作為它的參數,所以sortExpr
應該是那種類型,其中TSource
是對象,它存儲在你想要排序的集合中,讓我們說User
類。 TKey
是您想要排序的屬性類型,因為它可以是任意類型,您可以將其設置為object
,因為此類型參數是協變的。
所以聲明像
Func<User, object> sortExpr;
其余代碼可以保持原樣。
編輯
如果您使用的是IQueryable<TSource>.OrderBy
版本,它需要Expression<Func<TSource, TKey>>
,那么您只需要將變量定義為:
Expression<Func<User, object>> sortExpr;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.