C# Linq To Entities Group By,键中有多个表

C# Linq To Entities Group By,键中有多个表,c#,entity-framework,linq,group-by,fluent,C#,Entity Framework,Linq,Group By,Fluent,具有以下行的表格结构: 表B表C 我需要在Linq to EF中运行一个查询,以执行以下操作: SELECT SUM(TableC.SomeColumn) FROM TableA a INNER JOIN TableB b ON a.Id = b.fkAId INNER JOIN TableC c ON a.Id = c.fkAId WHERE <some_conditions> GROUP BY c.Col2, c.Col3, b.Col5 选择总和(

具有以下行的表格结构:

表B表C

我需要在Linq to EF中运行一个查询,以执行以下操作:

SELECT SUM(TableC.SomeColumn)
FROM TableA a
  INNER JOIN TableB b
    ON a.Id = b.fkAId
  INNER JOIN TableC c
    ON a.Id = c.fkAId

WHERE <some_conditions>

GROUP BY c.Col2, c.Col3, b.Col5
选择总和(表C.SomeColumn)
从表a
内连接表b
在a.Id=b.fkAId上
内联接表c
在a.Id=c.fkAId上
哪里
按c.Col2、c.Col3、b.Col5分组
到目前为止,我已经知道了这一点,但我无法确定如何在GROUPBY中指定表b列。它需要流畅,而不是LINQ SQL风格的表达式

var res = TableCs.Where(c =>
c.TableA.TableBs.Any(b => b.Col5 == "SomeValue") &&
.
.
.
)

.GroupBy(c => new { c.Col2, c.Col3, b.<***how to I get to b column here***>})
.Select(gr => new 
{
.
.
.
})
var res=TableCs.Where(c=>
c、 TableA.TableBs.Any(b=>b.Col5==“SomeValue”)&&
.
.
.
)
.GroupBy(c=>new{c.Col2,c.Col3,b.})
.选择(gr=>new
{
.
.
.
})
我可以从A中选择列,因为只有一个A导航属性,但当我导航到最后一段的集合时,我无法想象如何到达B列


有人知道如何为GroupBy键转到这些TableB列吗???

在分组之前,您需要使用允许投影的,如下所示

var query =
    TableCs.SelectMany(c => c.TableA.TableBs
        .Where(b => b.Col5 == "SomeValue"
            // && ...
        ),
        (c, b) => new { c, b }
    )
    .GroupBy(r => new { r.c.Col2, r.c.Col3, r.b.Col5 })
    .Select(g => new
    {
        g.Key.Col2,
        g.Key.Col3,
        g.Key.Col5,
        SomeColumnC = g.Sum(r => r.c.SomeColumn),
        SomeColumnB = g.Sum(r => r.b.SomeColumn)
        // ...
    });

太棒了,谢谢你。我知道我必须使用SelectMany,但我得到列表的地方是想象如何在挑选列时进行投影。我看到额外的参数(c,b)=>new{c,b}是kay;)