簡體   English   中英

LiNQ在OrderBy之后使用ThenBy

[英]LiNQ using ThenBy after OrderBy

我有一個OrderBy州議員的集合和數量,使用query.Sort參數進行排序

switch (filters.Sort)
{
    case "new":
        query = query.OrderByDescending(a => a.CreatedAt);
        break;
    case "old":
        query = query.OrderBy(a => a.CreatedAt);
        break;
    case "salary-asc":
        query = query.OrderBy(a => a.Profile.CompensationTypeRate.FromCompensation);
}

現在我需要使用query.Grade參數應用另一種排序。 我知道我應該使用ThenBy來擁有多個Order語句,但在這種情況下我不能將它寫在一行中。

是否有辦法編寫OrderByThenBy以便逐個執行,而不是一行?

或者我可以創建一個包含我的OrderByThenBy條件的匿名函數嗎?

如果使用IOrderedQueryable<T>類型的變量,則可以IOrderedQueryable<T> - 這就是啟用ThenBy 例如:

IOrderedQueryable<Application> ordered;

switch (filters.Sort)
{
    case "new":
        ordered = query.OrderByDescending(a => a.CreatedAt);
        break;
    case "old":
        ordered = query.OrderBy(a => a.CreatedAt);
        break;
    case "salary-asc":
        ordered = query.OrderBy(a => a.Profile.CompensationTypeRate.FromCompensation);
    default:
        // You need to work out what you want to do here. Maybe just
        // order by ID? You need to order by *something* to start with
        // in order to use ThenBy
}

// Apply the same secondary ordering, regardless of the primary one
ordered = ordered.ThenBy(x => x.Grade);

// You can then continue to use ordered, or assign the value back
// to query:
query = ordered;

請注意,所有這些仍然是懶惰的。 在您嘗試使用結果之前,實際上不會發生排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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