为什么选择linq的方法来对EF排序输出列表?

时间:2014-02-27 10:11:33

标签: linq entity-framework

我在SQL Server db中有Shifts表

RecID   ShiftTime   StartTime   EndTime
1       Day         06:40       15:45
2       After       15:46       23:30
3       Night       23:31       06:39
4       ShortDay    06:40       12:30
5       MiddDay     12:31       19:00

RecID - int,ShiftTime,StartTime和EndTime - varchar(20)

当我评估以下linq查询时 var shiftsNames = context.Shifts.Select(s => s.ShiftTime);
它将输出分类为After,Day,MiddDay,Night,ShortDay。

以这种形式
var shifts = context.Shifts.ToList();
var shiftsNames = shifts.Select(s=>s.ShiftTime).ToList();
linq按预期工作,没有排序。

2 个答案:

答案 0 :(得分:3)

第一个查询返回SQL服务器的排序 - 在查询中没有指定,所以你不能假设有关该顺序的任何内容。
第二个查询也是如此,但默认的“未排序”顺序似乎工作。
如果需要,添加分类。

在SQL中尝试:

Select * from table
Select col from table

最有可能获得不同的排序顺序。这就是你在这里看到的。

答案 1 :(得分:2)

如果未定义order by子句或OrderBy函数,LINQ不会对行进行排序。以不同顺序选择行的原因是标准SQL行为。如果没有order by子句,则以不可预测的方式返回行。通常,这是数据库中物理行的顺序,但不一定。如果为数据库定义了一个或多个索引,则顺序将取决于使用的索引。

使用示例检查this aticle