我有以下代码:

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/

10-13 02:04