我有这个问题:
_ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId })
.Select(m => new { pid = m.Key.TestPackageId, count = m.Count(i => i.Status == "Accept") })
此查询返回185个项目,每个项目的计数为:
但我需要count=5
项目的数量,所以我有这个问题:
_ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId })
.Select(m => new { pid = m.Key.TestPackageId, count = m.Count(i => i.Status == "Accept") }).Select(i => i.count == 5).Count();
我的代码有问题吗?
答案 0 :(得分:1)
在where子句
中设置count=5
_ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId })
.Select(m => new { pid = m.Key.TestPackageId, count = m.Count(i => i.Status == "Accept") })
.Where(i => i.count == 5)
.Count();
答案 1 :(得分:1)
您需要使用Where
过滤分组结果:
int count =
_ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId })
.Where(m => m.Count(i => i.Status == "Accept") == 5).Count();
如果您需要过滤,请使用.Where
而非.Select
。选择遍历所有元素的循环并返回您指定的新表单(可能从复杂对象中选择一个属性,或者出于某种原因将int转换为字符串)。
但是在需要过滤的地方,您使用.Where
并将条件作为参数传递。