我正在尝试构建一个非常简单的 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/