更新:错误报警!错误的根源在别处。 (请参见问题的末尾。)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