我正在尝试构建一个非常简单的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())
它返回“无效的列名“类型””
我不明白,在groupBy之后发生了orderby,我正在正确使用密钥。 看起来,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。
答案 0 :(得分:2)
尽管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())