![](/img/trans.png)
[英]Is it possible to make LINQ's OrderBy operation maintain the original order of an IQueryable?
[英]Maintain subsequence order in OrderBy
假設我有一個具有整數Day
屬性的類和一個IEnumerable<T>
對象,其中的天數分別為IEnumerable<T>
和5(按此順序)。
有沒有辦法保證子序列的順序(例如) o.Day == 3
是從其元素在原始列表中的相對位置維護而不需要IEnumerable
的顯式自定義實現?
如果這是你的意思, OrderBy
被記錄為穩定的 ; 所以:你不需要做任何事情。
該方法執行穩定的排序; 也就是說,如果兩個元素的鍵相等,則保留元素的順序。 相反,不穩定的排序不會保留具有相同鍵的元素的順序。
有沒有辦法保證子序列的順序在哪里
假設你有這樣的課程:
class A
{
public string Name { get; set; }
public int Day { get; set; }
// other properties
}
和順序:
{ "A", 2 },
{ "B", 3 },
{ "C", 4 },
{ "D", 1 },
{ "E", 3 },
{ "F", 3 },
{ "G", 5 },
如果你的意思是,這將是:
sequence.Where(item => item.Day == 3)
產生序列,其中的項目將按如下順序排列: B, E, F
,然后答案是“不,你不能保證”。
如果你的序列是List<A>
,那么將保留排序(事實上,它將通過LINQ to Objects保存,而不僅僅是列表)。
如果序列是IQueryable<A>
,那么排序可能取決於已經包含在IQueryable<A>
的LINQ提供程序實現,基礎數據源和當前表達式樹。 因此,在這種情況下,您應該強制使用OrderBy
/ OrderByDescending
排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.