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)
   }