使用条件获取Linq计数
我可以在下面的test1中获得一个计数,但是当我尝试获得一个带有条件的计数时,比如在test2中,我会得到以下错误: LINQ表达式。。。无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算 我正在使用Microsoft.EntityFrameworkCore 3.1.8使用条件获取Linq计数,linq,entity-framework-core,Linq,Entity Framework Core,我可以在下面的test1中获得一个计数,但是当我尝试获得一个带有条件的计数时,比如在test2中,我会得到以下错误: LINQ表达式。。。无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算 我正在使用Microsoft.EntityFrameworkCore 3.1.8 var test1 = query .G
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, 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(x => g.Key.Month == 1)
});
这是EF核心的局限性。但好消息是,您可以通过
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)
}
该错误属于实体框架。您应该指定当前使用的版本。您是否尝试了不带
string.Format
的同一查询?是的,我刚刚删除了string.Format,它似乎只在我向计数添加条件时出现,多次计数不是问题。谢谢,我还没有测试,但我假设它可以工作。我通过从原始查询中获取计数来实现它,这是一个技巧,但它是有效的:count=query.count(c=>c.CreationTime.Month==10&&c.CreationTime.Year==x.Key.Year&&c.CreationTime.Month==x.Key.Month&&c.CreationTime.Day==x.Key.Day)从EFC 5.0开始,它没有更多的限制。