我有以下代码:
var myCats = _context.Cats.Where(c => c.OwnerId == 1).OrderBy(c => c.Age);
var uniqueCatIds = myCats.Select(c => c.CatId).Distinct();
由于某些原因,当我使用探查器检查输出SQL时,会忽略
OrderBy
子句。我要做的是按照与出现在myCats中相同的顺序选择所有唯一的cat ID,并保留请求的IQueryable性质。如果将
.ToList()
放在OrderBy之后,则该排序将显示在SQL中并且可以使用。但是,对于这么多的猫,这样做的速度非常慢。任何想法为什么会这样?
最佳答案
您可以尝试使用中间投影:
var myCats = _context.Cats.Where(c => c.OwnerId == 1).OrderBy(c => c.Age).Select(c => new { c.Age, c.CatId });
var uniqueCatIds = myCats.Select(c => c.CatId).Distinct();
查询仍然在数据库上完全执行。
或使用
GroupBy
var uniqueCatIds = myCats.GroupBy(c => c.CatId).Select(c => c.Key);
(第二个查询同时使用您的
myCats
和/或我的 myCats
变体)关于c# - LINQ to实体忽略了我的orderby语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28851869/