Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq会弄乱数组的顺序吗?_C#_Linq_Arrays_.net 3.5_Foreach - Fatal编程技术网

C# Linq会弄乱数组的顺序吗?

C# Linq会弄乱数组的顺序吗?,c#,linq,arrays,.net-3.5,foreach,C#,Linq,Arrays,.net 3.5,Foreach,更新:假警报!错误的来源在别处。(见问题末尾。) Linq或foreach是否可能扰乱数组的顺序 我的一位测试人员报告说,他输入的项目列表的顺序与保存在数据库中的最终列表的顺序不匹配。更准确地说,第一个元素变成了最后一个元素 所以我一步一步地检查了我的代码,我不知道应该更改顺序。然而,有一个Linq查询和一个foreach循环。其中一个可能会扰乱数组的顺序吗 代码,简化: List<FooBar> fooBarList = new List<FooBar>(); str

更新:假警报!错误的来源在别处。(见问题末尾。)

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);
}
List fooBarList=newlist();
字符串[][]数据=新字符串[][]{
新字符串[]{“a”,“x”},
新字符串[]{“b”,“y”},
新字符串[]{“c”,“z”};
FooBar[]foobarray=数据。选择(
row=>newfoobar{Foo=row[0],Bar=row[1]}
).ToArray();
foreach(foobarray中的FooBar项)
{
intirank=fooBarList.Count+1;
项目排名=伊朗;
fooBarList.Add(项目);
}
字符串数组
数据
实际上是作为输入给出的。它被转换为一系列业务对象。然后将它们添加到列表中,并指定一个排名字段。该字段与“Foo”和“Bar”一起写入数据库

在数据库中保存列表后,在该特定情况下,“a”的排名为3。然而,对我来说,我无法重现这种不良行为


更新:我错了,写入数据库的数据是正确的。我查找的数据来自从原始对象复制的业务对象。复制时,从数据库中读取顺序时,顺序混淆,然后将错误的顺序保留在对象的副本中…=>接受Jon的回答,他说“LINQ to Objects通常有一个可预测的顺序,而其他提供者通常没有。”

好吧,您的示例代码只显示LINQ to Objects。如何将数据插入数据库?如果这也使用LINQ,我强烈怀疑是LINQtoSQL(或其他)方面导致了问题,而不是LINQtoObject

LINQto对象通常具有可预测的顺序,而其他提供程序通常没有


编辑:如果这种情况重复发生,那么您应该能够在调试器中捕捉到它的发生。。。这应该给你一些提示。我怀疑,如果您试图创建一个简短但完整的程序来演示问题,您最终会发现问题所在。

我使用NHibernate进行O/R映射。然而,“排名”字段是一个普通的整数字段:我是分配数字的人。NHibernate只是将数字保存在数据库中。我可以在数据库中看到“a”的排名是3,这意味着在分配排名时,顺序必须已经改变了。@chiccodoro:在这种情况下,它不应该发生。。。你也没有使用并行LINQ,是吗?我不知道(我怎么看?我只有一个导入系统。LINQ和OP中列出的语句),我也找不到任何潜在的种族条件来源。我想我必须在流程的另一部分中寻找错误的来源…哦!虚惊一场!多尴尬啊!(如果您感兴趣,请参阅我的问题的更新…)我最好的猜测是,当您将其转换为数组时,会发生一些事情,您现在可以使用列表来代替吗?