C# 使用LINQ lambda获取子表中的最大值
因此,我有如下数据(请注意,这些表格已简化): 我想从上面的数据表中计算出在最大轮中,有多少头的子项中没有B,结果应该是2,因为:C# 使用LINQ lambda获取子表中的最大值,c#,entity-framework,linq,lambda,C#,Entity Framework,Linq,Lambda,因此,我有如下数据(请注意,这些表格已简化): 我想从上面的数据表中计算出在最大轮中,有多少头的子项中没有B,结果应该是2,因为: 头1在第2轮中没有B(头1的最大轮数为2) 头2在第1轮中有B 标题3在第二轮中没有B(标题3的最大轮数为2) 这是我试过的灵药 var result = data.Where(e => !e.Child.Any(a => a.Code == "B" &&
var result = data.Where(e =>
!e.Child.Any(a =>
a.Code == "B" &&
a.Round == e.Child.Max(c => c.Round))).Count();
但是不起作用,我得到了这个
ORA-00904:“扩展项1”。“费用ID”:无效标识符
“Extent1”。“ID”是标题表上的ID列
在这种情况下,我怎样才能获得最大回合
-----解决了,谢谢------您只需要
子表。您可以按HeaderId
对子项进行分组,然后找到每个HeaderId
的最大轮数,并检查该轮中的子项是否有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();
事实证明,我的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();
感谢所有帮助我的人不清楚你在问什么,有什么例外?所以你想要的头球Id在他们的最大回合中没有B?@将军,我需要知道有多少头球在他们的子回合中没有B,但是上面的条件只适用于头球的子回合的最高回合。因此,如果孩子的头球有B,但不是在最高轮,它仍然是count@SelvaTS是的,您是对的“但由于Id无效(头表上的Id)而无法工作”-请澄清这一点。
var result = data.ToList().Where(e =>
!e.Child.Any(a =>
a.Code == "B" &&
a.Round == e.Child.Max(c => c.Round))).Count();