2012-09-28 65 views
3

我正在使用如圖所示聲明的對象。「選擇」元素的順序是否有所不同?

DataCollection<Entity> collection = GetDataCollection(...); 

然後,我挑選出兩組數據,如下所示。

IEnumerable<String> 
    array_1 = collection.Select(
    element => element.Attributes["attribute_1"] as String), 
    array_2 = collection.Select(
    element => element.Attributes["attribute_2"] as String); 

我非常好奇,如果這兩個數組保證有相同的順序。即如果他們的單獨訂單必須與原始序列中的相同。或者,至少,如果訂單因任何原因而改變,第一個單獨列表中的i th元素是否仍然對應於另一個元素中的i th元素?

+2

是安全的,在一次'變種ARR = collection.Select(元件同時獲得ATTRS =>新的{ \t \t \t \t \t \t ATTR1 = element.Attributes [ 「ATT1」]作爲字符串, \t \t \t \t \t \t ATTR2 = element.Attributes [ 「ATT2」]作爲字符串 \t \t \t \t \t});' –

回答

2

他們不保證是相同的。實際上,您可能會注意到訂單通常與原始集合一致。

如果您擔心一致性問題,只需添加一個OrderBy子句即可獲得您需要的訂單(或者至少兩個結果集合之間保持一致)。

+1

是否有可能'OrderBy'它們沒有指定明確排序功能?我的意思是像'OrderType.WhateverYouHadBefore'或'OrderType.JustAsLongAsYouAreConsistent'這樣的排序函數。或者我在說jibrish? –

+0

@Chamster - 除非原始組合是以某種方式訂購的,否。 –

+0

@Chamster在linq-to-objects中,當然。 'Select'將始終保持對任何「IEnumerable」的排序。一個'IQueryable'' Select'調用在數據庫中完成,因此它完全依賴於該提供者以及該數據庫設計,以確定查詢是否總是具有相同的順序。 – Servy

0

檢查這個答案:

Preserving order with LINQ

它不會出現,從這個答案至少,選擇調用保證是相同的順序。

我仍然遵循這個OrderBy(...)。看起來你永遠無法確定使用LINQ調用,所以如果有人進來並增加了一個額外的LINQ調用,他們可能不知道你期望他們是同一個訂單。

+0

我同意實用的應用程序,但不喜歡(潛在的)冗餘)。 :)當交付時,我會與您的建議,但。 –

+0

您的鏈接僅適用於Linq-to-Objects而非Entity Framework查詢。 – Servy

相關問題