因此,我的数据如下(请注意,这些表格被简化了):
Header:
Id
1
2
3
Child:
Id HeaderId Code Round
1 1 A 1
2 1 A 2
3 1 B 1
4 2 A 1
5 2 B 1
6 2 C 1
7 3 A 2
8 3 B 1
9 3 A 1
我想从上面的数据表中计算出在其最大舍入中有多少标题的子项中没有B,因为:
这是我试过的linq
var result = data.Where(e =>
!e.Child.Any(a =>
a.Code == "B" &&
a.Round == e.Child.Max(c => c.Round))).Count();
但是不起作用,我得到了这个
ORA-00904:“Extent1”,“EXPENSE_ID”:无效标识
“Extent1”,“Id”为表头Id列
在这种情况下,我如何才能获得最大圆度?
-解决了,谢谢
发布于 2018-07-04 14:25:49
事实证明,我的linq不工作,因为var result
是一个IQueryable
,所以我需要使用.ToList()
将其更改为List,然后再使用.AsQueryable()
将其更改回Queryable (如果需要),这是最终的linq:
var result = data.ToList().Where(e =>
!e.Child.Any(a =>
a.Code == "B" &&
a.Round == e.Child.Max(c => c.Round))).Count();
感谢每一个帮助过我的人
发布于 2018-07-03 05:10:36
您所需要的只是Child
表。您可以根据HeaderId
对子进程进行分组,然后找到每个HeaderId
的最大Round
,并在该轮中检查Code
的子进程。
var ans = Child.GroupBy(c => c.HeaderId)
.Where(cg => {
var maxRound = cg.Max(c => c.Round);
return cg.Where(c => c.Round == maxRound).All(c => c.Code != "B");
})
.Count();
https://stackoverflow.com/questions/51133882
复制相似问题