【问题标题】:EF Core 3.1 / MySQL - OrderByDescending is ignored after Distinct()EF Core 3.1 / MySQL - 在 Distinct() 之后忽略 OrderByDescending
【发布时间】: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.id DESC 订购

我在乞讨时做了什么

.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


【解决方案1】:

PS 我已经报告了这个“问题”

现在它已“修复”,人们将在 .net 6 中收到警告

https://github.com/dotnet/efcore/pull/24160

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2021-08-05
    • 2021-06-20
    • 2021-12-26
    • 2018-10-22
    • 2019-01-16
    • 2020-09-09
    相关资源
    最近更新 更多