我的where子句不适用于我的结果

时间:2016-08-15 08:11:38

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

我有这个查询

_ctx.TestPackageReportDetails.GroupBy(i => new {i.Status, i.TestPackageId})
                .Where(m => m.Count(i => i.Status == "Accept") == 5)

结果:

enter image description here

这个查询:

  var q2 = _ctx.TestPackages.ToList();

enter image description here

现在我在两个结果之间创建一个连接:

 _ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId })
                .Where(m => m.Count(i => i.Status == "Accept") == 5)
                .Join(_ctx.TestPackages, i => i.Key.TestPackageId, m => m.Id, (i, m) => new { pack = m, det = i })
                .Sum(i => i.pack.Size);

我基于testpackageid创建一个关节,我需要使用此条件Where(m => m.Count(i => i.Status == "Accept") == 5)的大小值之和,但它不起作用,并且查询计算所有包大小而不是包大小这个条件Where(m => m.Count(i => i.Status == "Accept") == 5)

2 个答案:

答案 0 :(得分:1)

您需要使用您不需要的状态过滤掉记录。您还需要开始使用更具可读性的Elegant Query-Syntax。像这样:

var sum = (from i in _ctx.TestPackageReportDetails
           where i.Status == "Accept"
           group i by new { i.Status, i.TestPackageId } into grouping
           where grouping.Count() == 5
           join m in _ctx.TestPackages
           on grouping.Key.TestPackageId equals m.Id
           select m.Size).Sum();

答案 1 :(得分:0)

您的连接字符串,数据库或代码都有问题。删除 Sum()时出现此错误的原因是因为在删除此项后,当您第一次调用执行它的函数时,将延迟执行此LINQ语句。这可以是 foreach toList()或类似的东西。在您的一个调用方法中,EntityFramework在内部打开另一个 DataReader ,因此如果您想要解决此问题,您应该检查您的连接字符串是否启用了 MultipleActiveResultSets 选项。

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;MultipleActiveResultSets=true;

如果启用此功能,您应该能够一次打开多个DataReader。