Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ lambda获取子表中的最大值_C#_Entity Framework_Linq_Lambda - Fatal编程技术网

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

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" &&

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

我想从上面的数据表中计算出在最大轮中,有多少头的子项中没有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" &&
                            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();