LINQPad结果中的默认“ID”排序

时间:2011-01-13 12:47:59

标签: c# .net linq sql-order-by linqpad

我已经实现了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建议的第一个默认查询。

2 个答案:

答案 0 :(得分:1)

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

我从工作经验中知道这一点,因为我有一个linq查询,在插入一些外部数据之前工作正常。这种外部数据虽然以线性方式插入,但实际上有多年的日期参考。因此,当我顺序运行thro linq时,部分丢失了。按日期排序修复了问题。 (这是几年前,我已经学会了考虑默认的排序顺序):)

只是我的tuppence

答案 1 :(得分:1)

我认为你会忘记像SQL一样,除非另有明确规定,否则很少在LINQ中强制保留顺序(在LINQ中对象,大部分都是这样)。

为了解决这个问题,如果您需要执行Take(或top n之类的操作,则始终指定订单,尤其是 SQL)。这将保证每次都能得到结果。

否则,它们是不确定的。