1

我已经实现了 WCF oData 服务,并且可以成功地从 LINQPad 查询 oData 服务。在我的 oData 服务中,我将内存驻留集合排序为逻辑业务订单,并已通过原始 html 浏览器查询确认预期的有序数据已通过网络传输。

然而,LINQPad 似乎根据所运送对象的“ID”键对结果强加了自己的默认顺序。

这是 LINQPad 中的预期行为吗?我是否错过了一些可以禁用默认 ID 排序的设置属性?

编辑:正如 Lasse 所说,我应该包含查询,这里是......

MyClass.Take (50)

在 WCF 服务中,这里是必不可少的集合代码......

var list = new System.Collections.Generic.List<MyClass>();

..    // collection population

return list.AsQueryable();

* 更新 *

本地排序行为特定于 ClassName.Dump(nn) LINQPad 命令。

ClassName 和 ClassName.ToList() 都按照从我的 oData 服务发货的顺序显示结果。这对我来说仍然是一个小问题,因为我计划将 LINQPad 发送给半技术用户测试群体,以便他们可以在财务建模应用程序中查询临时计算。Dump() 命令是 LINQPad 建议的第一个默认查询。

4

2 回答 2

2

I think you are forgetting that like SQL, unless explicitly specified otherwise, preservation of order is rarely imposed in LINQ (it is in LINQ to objects, for the most part).

In order to address this, you should always specify order, especially if you need to perform operations like Take (or top n in SQL). This will guarantee the results everytime.

Otherwise, they are indeterminable.

于 2011-01-13T13:54:09.607 回答
1

我认为默认顺序是基于它们物理插入数据库的顺序。在这种情况下,我会确保您的真实应用程序始终对数据应用逻辑排序(或者在这种情况下,您的 linqpad 查询)。

我从工作经验中知道这一点,因为在插入一些外部数据之前,我有一个运行良好的 linq 查询。这些外部数据虽然以线性方式插入,但实际上具有跨越多年的日期参考。因此,当我通过 linq 进行顺序运行时,缺少部分。按日期排序解决了这个问题。(这是几年前的事了,我已经学会了考虑默认排序顺序):)

只是我的礼物

于 2011-01-13T12:52:41.503 回答