我有下表:
我需要获取3个列表:
我有以下LINQ:
var filtersData = from push in _pushRepository.Pushes.Select(x => new
{
x.Advertiser,
x.Category,
x.PackageId
})
group push by new
{
push.Advertiser,
push.Category,
push.PackageId
}
into gr
select new
{
advertisers = gr.Select(x => x.Advertiser).Distinct(),
categories = gr.Select(x => x.Category).Distinct(),
appIds = gr.Select(x => x.PackageId).Distinct()
};
它非常接近此SQL查询:
SELECT x."Advertiser", x."Category", x."PackageId"
FROM "Pushes" AS x
group by x."Advertiser", x."Category", x."PackageId"
但没有distinct
。
我已经打开了npgsql
的查询日志记录。这让我感到惊讶,但是LINQ指令不会生成Group by
。请查看控制台调试输出:
这是正确的行为,并且EF Core将借助内部机制进行分组,或者LINQ中存在我的错误?
P.S。我使用.NET Core 2.2
答案 0 :(得分:1)
正如@ gert-arnold在评论中所写,您对GroupBy的用法无法转换为SQL-必须为此应用聚合运算符。阅读the documentation可以更好地了解EF Core可以翻译哪些案件。
您仍然可以通过在GroupBy运算符之前插入一个AsEnumerable在客户端执行GroupBy。