如何在加入第三个表时将外连接加入列表
问题描述:
我有3个表:表A,B和C.表A具有主键“Id”,表B和C通过存储ID在FK成员。如何在加入第三个表时将外连接加入列表
我想以下几点:
表A的每一行,得到表B中的匹配行(A的ID等于表B的FK),并获得在具有FK表C中的每一行= Id。
所以我的结果应该是清单:
{
TableARow,
TableBRow,
List<TableCRow>
}
var query = from r in context.TableA
join c in context.TableB
on r.Id equals c.FK
join m in context.TableC
on r.Id equals m.FK
into mappings
select new MyViewModel
{
A = r,
B = c,
C = mappings.ToList()
};
var result = query.ToList();
以上查询是我,但它只返回每次一个项目的mappings.ToList()。
非常感谢
答
当你join
你不同的表,你做你的模型看起来像{ TableARow, TableBRow, TableCRow }
的方式。
相反,如果你想拥有它的那TableCRow
是List
内,你应该GroupBy
的A
和B
行:
var query = (from r in context.TableA
join c in context.TableB
on r.Id equals c.FK
join m in context.TableC
on r.Id equals m.FK
group m by new { r, c } into grouping
select new MyViewModel
{
A = grouping.Key.r,
B = grouping.Key.c,
C = grouping.ToList()
}).ToList();
而不是使用联接为什么不使用实体的导航属性的? https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/ – juharr