问题描述
我可以在下面的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)
}