代码之家  ›  专栏  ›  技术社区  ›  chiccodoro

Linq会扰乱数组的顺序吗?

  •  1
  • chiccodoro  · 技术社区  · 15 年前

    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

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

    更新:我错了,写入数据库的数据是 对的 . 我查看的数据来自 从原来的那个。复制时,从数据库中读取顺序时,顺序被混淆了,然后错误的顺序被保留在对象的副本中。。。=>接受Jon的回答,他说“linqto对象通常具有可预测的顺序,而其他提供者通常没有。”

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jon Skeet    15 年前

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

    linqto对象通常具有可预测的顺序,而其他提供者通常没有。