如何解决GroupBy和按条件计数实体框架
我正在尝试按列分组并计算其他列中正确/错误行的数量。
例如,我们有一个实体类:
mockito
我需要按Type分组,并在ParentId是某个值的情况下计算对/错选票的数量。我所拥有的:
public class Example {
public int Id { get; set; }
public int ParentId { get; set; }
public string Type { get; set; }
public bool Vote { get; set; }
}
此代码运行时,实体抛出异常,表明无法将其转换为SQL。问题出在Count调用上。
还需要考虑性能。
解决方法
到目前为止,在EF6中以及在EF Core中都完全不支持有条件的Count
SQL翻译。
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,反之亦然。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。