首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用LINQ lambda获取子表中的最大值

使用LINQ lambda获取子表中的最大值
EN

Stack Overflow用户
提问于 2018-07-02 18:17:55
回答 2查看 287关注 0票数 0

因此,我的数据如下(请注意,这些表格被简化了):

代码语言:javascript
复制
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,因为:

  1. 标头%1在轮次2中没有B(标头1最大轮数为2)
  2. 标头%2在轮次1中没有B
  3. 标头%3在轮次2中没有B(标头3最大轮数是2)

这是我试过的linq

代码语言:javascript
复制
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列

在这种情况下,我如何才能获得最大圆度?

-解决了,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-04 14:25:49

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

代码语言:javascript
复制
var result = data.ToList().Where(e =>
             !e.Child.Any(a =>
                    a.Code == "B" &&
                    a.Round == e.Child.Max(c => c.Round))).Count();

感谢每一个帮助过我的人

票数 0
EN

Stack Overflow用户

发布于 2018-07-03 05:10:36

您所需要的只是Child表。您可以根据HeaderId对子进程进行分组,然后找到每个HeaderId的最大Round,并在该轮中检查Code的子进程。

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51133882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档