簡體   English   中英

LINQ to實體在連接后跳過

[英]linq to entities skip after concat

我要顯示的結果沒有先顯示輔助ID,然后再顯示確實具有輔助ID的項目。 但是然后我需要SkipTake

IQueryable<thing> result;
IQueryable<thing> result2;

result2 = result
    .Where(t => !(t.second_id == null || t.second_id.Trim() == string.Empty))
    .OrderBy(t => t.second_id);

result = result
    .Where(t => (t.second_id== null || t.second_id.Trim() == string.Empty))
    .OrderBy(t => t.first_id);

result = result.Concat(result2);

return result
    .Select(t => t.primary_key)
    .Skip(pageSize * pageNumber)
    .Take(pageSize)
    .ToList();

問題在於,在Concat之后, IQueryable在技​​術上已不再訂購,因此Skip and Take引發錯誤。 像這樣:

PagedList錯誤:在方法“跳過”之前必須調用方法“ OrderBy”

您可以使用條件運算符在一個查詢中執行此操作:

return result.OrderBy(t => (t.second_id != null && t.second_id.Trim() != String.Empty))
             .ThenBy(t => (t.second_id != null && t.second_id.Trim() != String.Empty) ? t.second_id : t.first_id)
             .Select(t => t.primary_key)
             .Skip(pageSize * pageNumber)
             .Take(pageSize)
             .ToList();

如果您需要以某種方式訂購重復的second_id ,則需要進行一些調整,但原始代碼則不需要。

PS我折疊了否定運算符,因為我認為它讀起來更清晰。

您只需一個查詢即可完成工作

result = result
.OrderByDescending(t => (t.second_id== null || t.second_id.Trim() == 
 string.Empty))
.ThenBy(t => t.second_id)
.ThenBy(t => t.first_id)
.Select(t => t.primary_key)
.Skip(pageSize * pageNumber)
.Take(pageSize)
.ToList();

暫無
暫無

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

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