如何用LINQlambda求子表的最大值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (101)

所以我有如下数据(注意这些表是简化的):

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的头数,从结果上面的数据表应该是2因为:

  1. 标题1在第2轮中没有B(标题1最大轮次为2)
  2. 标题2在第1轮中有B
  3. 标题3在第2轮中没有B(标题3最大轮次为2)

这是我试过的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列

在这种情况下我怎么能获得最大回合?

提问于
用户回答回答于

你只需要Child表。你可以对子项进行分组HeaderId,然后找到Round每个子项的最大值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();

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问30 回答
  • 学生

    3 粉丝476 提问28 回答
  • o o

    4 粉丝494 提问27 回答

扫码关注云+社区

领取腾讯云代金券