微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linq随着条件而增加

如何解决Linq随着条件而增加

我可以在下面的test1中获得计数,但是当我尝试在条件中获得计数时(例如在test2中),就会出现此错误

LINQ表达式...无法翻译。可以以可翻译的形式重写查询,也可以通过插入对AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()的调用来显式切换到客户端评估。

我正在使用Microsoft.EntityFrameworkCore 3.1.8

        var test1 = query
             .GroupBy(g => new { g.CreationTime.Year,g.CreationTime.Month,g.CreationTime.Day })
             .OrderBy(o => o.Key.Year).ThenBy(o => o.Key.Month).ThenBy(o => o.Key.Day)
             .Select(g => new {
                 Key = g.Key.Month,Count = g.Count()
             });


        var test2 = query
             .GroupBy(g => new { g.CreationTime.Year,Count = g.Count(x => g.Key.Month == 1)
             });

解决方法

这是EF Core的限制。但好消息是您可以通过Sum聚合函数来模拟此查询。

var test = 
   from q in query
   group q by new 
     {
        q.CreationTime.Year,q.CreationTime.Month,q.CreationTime.Day
     } into g
   select new 
   {
      Key   = g.Key.Month,Count = g.Sum(x => x.Month == 1 ? 1 : 0)
   }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。