groupby之后选择返回相同的记录

时间:2016-08-14 09:19:05

标签: c# entity-framework count group-by

我有这个问题:

  _ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId })
                .Select(m => new { pid = m.Key.TestPackageId, count = m.Count(i => i.Status == "Accept") })

此查询返回185个项目,每个项目的计数为:

enter image description here

但我需要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();

但这会让186回归186? enter image description here

我的代码有问题吗?

2 个答案:

答案 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并将条件作为参数传递。