Order在LINQ中没有任何影响

时间:2018-05-02 09:59:53

标签: sql-server linq sql-order-by

我有一个包含一组数据的表,如下所示:

enter image description here

请注意,上述结果由以下SQL查询收集:

select * from Logs where RegisterationId = 16 
 and date = '2018-04-13 00:00:00.000'
order by DateTime ASC;

现在这是完美的,但是当我尝试在LINQ中使用相同的方法:

var logs = db.Logs.Where(x => x.RegisterationId == EnrollNumber && x.Date >= StartDate &&
               x.Date <= EndDate && x.isIgnore != true).OrderBy(x => x.DateTime).Distinct().ToList();

它将所有Manual_Entry日志放在列表底部/末尾(请注意下面快照中的索引15,16和17),而不是OrderBy {{ 1}}。我需要它们使用SQL查询完全按照它的方式排序:

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

正如@Ivan Stoev已经提到的: LINQ to Entities sql translator忽略了 OrderBy之前的Distinct / GroupBy。

但如果你必须使用它,请在之前使用 OrderBy

 var logs = db.Logs.Where(x => x.RegisterationId == EnrollNumber && x.Date >= 
                    StartDate && x.Date <= EndDate && x.isIgnore != true).Distinct().OrderBy(x => x.DateTime).ToList();

排除Distinct()应该会为您提供相应的列表:

var logs = db.Logs.Where(x => x.RegisterationId == EnrollNumber && x.Date >= 
                   StartDate && x.Date <= EndDate && x.isIgnore != true).OrderBy(x => x.DateTime).ToList();

答案 1 :(得分:1)

.Distinct销毁订单。切换DistinctOrderBy来电的位置。