linq - GroupBy OrderBy Linq - 无效列

标签 linq ef-core-2.0

我正在尝试构建一个非常简单的 LinQ 查询,用于将 json 返回给我的客户端。

以下作品:

_context.MyTable
.GroupBy(g => new { type= g.TypeId })
.Select(x => x.Count())

但是,我想重新调整按类型排序的计数列表,因此我编写了以下内容,但它不起作用:

_context.MyTable
.GroupBy(g => new { type= g.TypeId })
.OrderBy(o => o.Key.type)
.Select(x => x.Count())

它返回“无效的列名“类型””

我不明白,orderby 发生在 groupBy 之后,我正确使用了 key 。 看起来,orderBy 需要 Slect 语句中的条件才能正常工作。 例如,以下作品:

_context.MyTable
.GroupBy(g => new { type= g.TypeId })
.OrderBy(o => o.Key.type)
.Select(x => {x.Count(), x.Key.type})

但它没有返回我想要的内容,我只想获取按类型排序的计数值。

请告诉我为什么会出现此错误。

如果有帮助的话,我正在使用 EF Core。

S.

最佳答案

尽管 EF Core 2.1 引入了对 LINQ GroupBy translation 的改进,实现还很不完美,在很多场景下会由于无效的 SQL 生成而产生异常。您的场景只是其中之一,即使使用目前最新的 EF Core 2.1.1 位也无法正常工作。

您应该做的第一件事是将其提交到 EF Core issue tracker ,以便他们知道并在可能的情况下修复它。

问题似乎与关键属性别名有关(如果您使用“正常”.GroupBy(e => e.TypeId).OrderBy(g => g.Key,它也不起作用) ))。我发现的当前解决方法是使用与源具有相同属性名称的匿名类型键:

_context.MyTable
    .GroupBy(e => new { e.TypeId })
    .OrderBy(g => g.Key.TypeId)
    .Select(g => g.Count()) 

关于linq - GroupBy OrderBy Linq - 无效列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51548387/

相关文章:

c# - 使用 ObjectResult 将 EF6 转换为 EF 核心

vb.net - list<Of T> 上的多种排序

c# - EF Core回滚迁移错误: column of invalid type to be used as key column

entity-framework - 在 EF Core 中添加外键列

c# - 为什么引用属性只能通过上下文工作

c# - 如何获取 token 声明值并注入(inject) dbcontext 服务

c# - LINQ 表达式如何与存储过程一起使用?

mysql - SQL Group 通过使用每个组中的前 N ​​个元素

c# - 如何使用 LINQ 组合 IEnumerable(Of IEnumerable)?

linq - Sitecore7 Linq to Sitecore 仅适用于 SearchResultItem 而不适用于自定义映射类