更新:錯誤報警!錯誤的根源在別處。 (請參見問題的末尾。)Linq搞亂數組的順序?
Linq或foreach是否可能會混淆數組的順序?
我的一位測試人員報告說,他所輸入的項目列表順序與保存在數據庫中的最終列表順序不匹配。更確切地說,第一個元素成爲最後一個元素。
所以我一步一步地檢查了我的代碼,我不知道應該改變順序。有一個Linq查詢和一個foreach循環。這其中的一個可能會搞亂數組的順序嗎?
代碼,簡化了:
List<FooBar> fooBarList = new List<FooBar>();
string[][] theData = new string[][] {
new string[] { "a", "x" },
new string[] { "b", "y" },
new string[] { "c", "z" } };
FooBar[] fooBarArray = theData.Select(
row => new FooBar { Foo = row[0], Bar = row[1] }
).ToArray();
foreach (FooBar item in fooBarArray)
{
int iRank = fooBarList.Count + 1;
item.Ranking = iRank;
fooBarList.Add(item);
}
串theData
的陣列的陣列是在作爲輸入給出的事實。它被轉換成一系列業務對象。然後將它們添加到列表中並分配排名字段。該字段與「Foo」和「Bar」一起被寫入數據庫。
將該列表保存在數據庫中後,在該特定情況下,「a」的等級爲3。但對我來說,我無法重現的錯誤行爲...
更新:我錯了,寫入到數據庫中的數據是正確的。我看到的數據來自複製從一個業務對象。複製時,訂單在從數據庫中讀取時被混淆,然後這個錯誤的訂單被保存在對象的副本中...... =>接受Jon的回答說「LINQ to Objects通常具有可預測的排序 - 其他供應商經常別。」
我最好的猜測是,當你將它轉換爲數組時,發生了什麼事情,你現在可以用列表來代替嗎? – Gage 2010-09-20 15:41:03