首页 > 解决方案 > 使用 LINQ lambda 在子表中获取最大值

问题描述

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

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" 是 Header 表上的 Id 列

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

------已解决,谢谢-----

标签: c#entity-frameworklinqlambda

解决方案


事实证明,我的 linq 不工作,因为var result它是一个IQueryable所以我需要将其更改为 List using .ToList(),然后再将其更改回 Queryable using .AsQueryable()(如果需要),这是最终的 linq:

var result = data.ToList().Where(e =>
             !e.Child.Any(a =>
                    a.Code == "B" &&
                    a.Round == e.Child.Max(c => c.Round))).Count();

感谢所有帮助过我的人


推荐阅读