我在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按预期工作,没有排序。
答案 0 :(得分:3)
第一个查询返回SQL服务器的排序 - 在查询中没有指定,所以你不能假设有关该顺序的任何内容。
第二个查询也是如此,但默认的“未排序”顺序似乎工作。
如果需要,添加分类。
在SQL中尝试:
Select * from table
Select col from table
最有可能获得不同的排序顺序。这就是你在这里看到的。
答案 1 :(得分:2)
如果未定义order by
子句或OrderBy
函数,LINQ不会对行进行排序。以不同顺序选择行的原因是标准SQL行为。如果没有order by
子句,则以不可预测的方式返回行。通常,这是数据库中物理行的顺序,但不一定。如果为数据库定义了一个或多个索引,则顺序将取决于使用的索引。
使用示例检查this aticle。