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中并且它可以工作.然而,有这么多猫,这样做很慢.
任何想法为什么会这样?
您可以尝试使用中间投影:
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变体)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |