OrderBy 在 LINQ 中没有任何效果
OrderBy not having any effect in LINQ
我有一个table里面有一组数据,如下:
请注意,以上结果是通过以下 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
日志一起放在列表的 bottom/at 末尾(注意下面快照中的索引 15,16 和 17),而不是 OrderBy
DateTime
。我需要它们按照使用 SQL 查询的方式进行排序:
.Distinct
破坏秩序。切换 Distinct
和 OrderBy
调用的位置。
正如@Ivan Stoev 已经提到的:
LINQ to Entities sql 翻译器忽略 Distinct / GroupBy 之前的 OrderBy。
但如果你必须使用它,请在之前使用它 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();
我有一个table里面有一组数据,如下:
请注意,以上结果是通过以下 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
日志一起放在列表的 bottom/at 末尾(注意下面快照中的索引 15,16 和 17),而不是 OrderBy
DateTime
。我需要它们按照使用 SQL 查询的方式进行排序:
.Distinct
破坏秩序。切换 Distinct
和 OrderBy
调用的位置。
正如@Ivan Stoev 已经提到的: LINQ to Entities sql 翻译器忽略 Distinct / GroupBy 之前的 OrderBy。
但如果你必须使用它,请在之前使用它 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();