我已经实现了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建议的第一个默认查询。
答案 0 :(得分:1)
我认为默认顺序是基于它们物理插入数据库的顺序。在这种情况下,我确保您的真实应用程序始终对数据应用逻辑排序(或者在这种情况下,您的linqpad查询)。
我从工作经验中知道这一点,因为我有一个linq查询,在插入一些外部数据之前工作正常。这种外部数据虽然以线性方式插入,但实际上有多年的日期参考。因此,当我顺序运行thro linq时,部分丢失了。按日期排序修复了问题。 (这是几年前,我已经学会了考虑默认的排序顺序):)
只是我的tuppence答案 1 :(得分:1)
我认为你会忘记像SQL一样,除非另有明确规定,否则很少在LINQ中强制保留顺序(在LINQ中对象,大部分都是这样)。
为了解决这个问题,如果您需要执行Take
(或top n
之类的操作,则始终指定订单,尤其是 SQL)。这将保证每次都能得到结果。
否则,它们是不确定的。