gpt4 book ai didi

c# - GroupBy 和 Count by condition Entity Framework

转载 作者:行者123 更新时间:2023-12-05 03:49:11 25 4
gpt4 key购买 nike

我正在尝试按列分组并计算其他列中真/假行的数量。

例如我们有一个实体类:

public class Example {
public int Id { get; set; }
public int ParentId { get; set; }
public string Type { get; set; }
public bool Vote { get; set; }
}

我需要按 Type 分组,并计算 ParentId 为某个值的正确/错误投票数。我有什么:

await _dbContext.Example
.Where(x => x.ParentId == parentid)
.GroupBy(x => new { t.Type, t.Vote })
.Select(x => new
{
TrueVotes = x.Count(v => v.Vote == true),
FalseVotes = x.Count(v => v.Vote == false),
Type = x.Key.Type
})
.ToListAsync();

实体在运行此代码时抛出异常,表示无法将其转换为 SQL。问题出在 Count 调用上。

性能也需要考虑在内。

最佳答案

条件 Count SQL 转换在 EF6 中得不到很好的支持,直到现在在 EF Core 中也完全没有得到支持。

EF Core 5.0(目前处于预览阶段)终于添加了正确的翻译,因此示例代码无需修改即可运行。

在 EFC Core 5.0 之前,您可以使用等效的条件 Sum,即代替

Count(condition)

使用

Sum(condition ? 1 : 0)

在您的查询中

TrueVotes = x.Sum(v => v.Vote == true ? 1 : 0),
FalseVotes = x.Sum(v => v.Vote == false ? 1 : 0),

不相关,但您可能应该从分组键中排除Vote

//.GroupBy(x => new { t.Type, t.Vote })
.GroupBy(x => new { t.Type })

否则计数将始终为 0 和 1,反之亦然。

关于c# - GroupBy 和 Count by condition Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64079347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com