[英]linq to entities skip after concat
我要顯示的結果沒有先顯示輔助ID,然后再顯示確實具有輔助ID的項目。 但是然后我需要Skip
並Take
。
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
引發錯誤。 像這樣:
您可以使用條件運算符在一個查詢中執行此操作:
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.