首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GroupBy不能翻译

GroupBy不能翻译
EN

Stack Overflow用户
提问于 2021-03-30 02:12:42
回答 2查看 3.2K关注 0票数 5

我正试着从我的数据库中删除副本。我正在使用实体框架核心()和.NET 5。EF在通过以下方式实现我的组时遇到了困难:

代码语言:javascript
复制
protected async Task RemoveDuplicates(CryptoInfoContext cryptoContext)
{
    try
    {
        var duplicates = cryptoContext.HistoricalCandles
            .GroupBy(x => new { x.StartDate, x.GranularitySeconds })
            .Where(x => x.Count() > 1)
            .ToList()
            .Select(x => x.FirstOrDefault())
            .ToList();

        cryptoContext.RemoveRange(duplicates);
        await cryptoContext.SaveChangesAsync();
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex);
    }
}

我收到一个错误:

无法翻译给定的'GroupBy‘模式。在“AsEnumerable”之前调用“GroupBy”来评估它的客户端

我不想将我的所有行都物化,以删除副本。是否有一份已知问题的清单?我该如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-30 14:03:41

感谢@GertArnold为我指明了正确的方向。显然,EF组只支持聚合查询。

正如本文章所指出的

代码语言:javascript
复制
var ctx = new EntertainmentDbContext(conString);

var dataTask = ctx
            .Ratings
            .GroupBy(x => x.Source)
            .Select(x => new {Source = x.Key, Count = x.Count()})
            .OrderByDescending(x => x.Count)
            .ToListAsync();

var data = await dataTask;

它将生成如下所示的SQL:

代码语言:javascript
复制
SELECT "r"."Source", COUNT(*) AS "Count"
FROM "Ratings" AS "r"
GROUP BY "r"."Source"
ORDER BY COUNT(*) DESC

注意:目前几乎没有任何其他工作,您甚至不能在组之前应用where。

此外,还有一个开放的EF核心问题 --请投票表决--因此他们实际上修复了这个问题,而不是把它推到另一个版本

票数 4
EN

Stack Overflow用户

发布于 2021-03-30 07:09:43

按价值计算,您的组是DateTime。只能在group子句中使用标量值,因为SQL也不能按日期分组。还可以看看本文对此问题作了更详细的解释。关于SQL详细信息的问题

至于解决办法,我没有尝试过,但您可能可以按时间字符串表示或滴答进行分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66863901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档