Linq To实体分组依据,键中有多个表
本文关键字:实体 To Linq | 更新日期: 2023-09-27 18:25:31
具有以下行的表结构:
表B <---1表格A1---> 表C
我需要在Linq中向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
到目前为止,我已经知道了,但我不知道如何在group by中指定表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重载来允许投影,比如这个
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)
// ...
});