【发布时间】:2021-03-30 00:24:57
【问题描述】:
我运行这个查询
var query = await _db.Production
.OrderByDescending(q => q.Id)
.Where(q => q.Industry > 0)
.Select(m => m.FromCompany).Distinct().Take(10).ToListAsync()
并得到以下内容
Executed DbCommand (64ms) [Parameters=[@__p_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30'] SELECT DISTINCT `j`.`from_company` FROM `production` AS `j` WHERE (`j`.`Industry` > 0) LIMIT @__p_0
但是,我希望看到
按
production.idDESC 订购
我在乞讨时做了什么
.OrderByDescending(q => q.Id)
distinct 后如何订购?
更新。
如果我在 distinct 之后下订单,我将无法按 ID 排序: 错误 CS1061 'int' 不包含 'Id' 的定义并且没有 可访问的扩展方法“Id”接受类型的第一个参数 可以找到“int”(您是否缺少 using 指令或程序集 参考?)
【问题讨论】:
-
OrderBy 必须在 Distinct 之后 出现。要获取该位置的 ID,请使用匿名对象传递 - 或使用 GroupBy。按未通过集合进行的列排序是不合逻辑/不保证的(因此将其删除)。
-
@user28647400 我已报告此问题将在未来版本中警告github.com/dotnet/efcore/issues/23267
-
不错。警告可能会省去很多麻烦。
标签: c# entity-framework linq