Linq To Entities Group By 键中有多个表

Linq To Entities Group By with multiple tables in key

table 结构如下:

TableB <---1 TableA 1---> 表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

到目前为止我已经有了这个,但我不知道如何在分组依据中指定 table 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 
{
.
.
.
})

我可以从 A 中选择列,因为只有一个 A 导航 属性,但我无法想象如何到达 B 列,因为我正在导航到最后一个集合腿.

有谁知道如何将这些 TableB 列作为 GroupBy 键?

分组前需要使用允许投影的Queryable.SelectMany overload,像这样

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)
        // ...
    });