如何在加入第三个表时将外连接加入列表

问题描述:

我有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()。

非常感谢

+0

而不是使用联接为什么不使用实体的导航属性的? https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/ – juharr

当你join你不同的表,你做你的模型看起来像{ TableARow, TableBRow, TableCRow }的方式。

相反,如果你想拥有它的那TableCRowList内,你应该GroupByAB行:

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();