簡體   English   中英

帶有表達式變量的 Linq OrderBy

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM