我有这个查询
_ctx.TestPackageReportDetails.GroupBy(i => new {i.Status, i.TestPackageId})
.Where(m => m.Count(i => i.Status == "Accept") == 5)
结果:
这个查询:
var q2 = _ctx.TestPackages.ToList();
现在我在两个结果之间创建一个连接:
_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)
答案 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。