LINQ to entities忽略了我的orderby语句

Nib*_*Pig 5 c# linq-to-entities sql-server-2012

我有以下代码:

var myCats = _context.Cats.Where(c => c.OwnerId == 1).OrderBy(c => c.Age);

var uniqueCatIds = myCats.Select(c => c.CatId).Distinct();
Run Code Online (Sandbox Code Playgroud)

出于某种原因,OrderBy当我使用探查器检查输出SQL时,将忽略该子句.我想要做的是按照它们在myCats中出现的顺序选择所有唯一的猫ID,并保留请求的IQueryable性质.

如果我放在.ToList()OrderBy之后,则排序出现在SQL中并且它可以工作.然而,有这么多猫,这样做很慢.

任何想法为什么会这样?

xan*_*tos 0

您可以尝试使用中间投影:

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();
Run Code Online (Sandbox Code Playgroud)

查询仍然在数据库上完全执行。

或通过使用GroupBy

var uniqueCatIds = myCats.GroupBy(c => c.CatId).Select(c => c.Key);
Run Code Online (Sandbox Code Playgroud)

(第二个查询包含您myCats和/或我的myCats变体)