c# - Linq 结果以不同的顺序显示

标签 c# linq linq-to-sql linqpad

我目前正在摆弄 AdventureWorks 示例数据库和 LinqPad,以寻求一些想法。

这是有问题的查询:

SalesOrderHeaders.GroupBy (soh => new {soh.CustomerID, soh.BillToAddressID})
                 .Where(soh => soh.Skip(1).Any())
                 .Dump();

我们的想法是根据某些标准找到重复项,然后显示除第一组数据之外的重复项。结果应从表中删除。

执行查询后我得到结果 A) First Result

再次执行查询后得到结果 B) enter image description here

我不关心查询的正确结果,而是关心结果集的排序。只有这两种可能性存在,并且它们在每次运行查询时交替出现。 当然我可以按 Key 订购,但我更感兴趣的是为什么会发生这种情况?为什么顺序改变/交替?

最佳答案

Sql server select 查询的结果集顺序是不确定的。这就是 sql server 的工作方式,它不是 linq 或 linqpad 中的错误。正如您自己指出的那样,在查询中获得确定性结果的唯一方法是使用 OrderBy 子句。

编辑:如果多次运行查询,关于在 SSMS 中获得相同的结果,请参阅 this .这篇文章解释了为什么多次执行查询可能会得到相同的结果,以及为什么不应该依赖它。

关于c# - Linq 结果以不同的顺序显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25930101/

相关文章:

c# - ImageGalleryControl 未触发

c# - 可以堆叠多个 IEnumerable 查询吗?

c# - TakeWhile,但我也想要输入序列的其余部分

c# - Linq 上下文对象未注册为 System.IDisposable 对象的类型

c# - 管理引用计数和对象生命周期的模式

c# - 重载 operator== 并与 null 进行比较

c# - Entity Framework - 如何获取列?

vb.net - 无法从 LINQ 查询中提取字段

c# - 从逻辑上讲,为什么不能更改对象的 ParentID,而我必须自己更改父对象?

linq-to-sql 组合表达式