【问题标题】:How to do an outer join into a list while joining a third table如何在加入第三个表时对列表进行外部联接
【发布时间】:2016-12-07 18:58:01
【问题描述】:

我有 3 个表:表 A、B 和 C。表 A 具有主键“Id”,表 B 和 C 都通过将 id 存储在 FK 成员中来链接到该表。

我想要以下:

对于表 A 中的每一行,获取表 B 中的匹配行(A 的 Id 等于表 B 的 FK),并获取表 C 中 FK = 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() 返回一项。

非常感谢

【问题讨论】:

标签: c# mysql sql linq


【解决方案1】:

当您join 不同的表时,您创建模型的方式将类似于{ TableARow, TableBRow, TableCRow }

如果您希望 TableCRowList 内,则应将 GroupBy AB 行:

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

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 2011-04-12
    • 1970-01-01
    • 2013-10-06
    • 2015-09-15
    • 1970-01-01
    • 2019-08-09
    • 2019-11-11
    • 1970-01-01
    相关资源
    最近更新 更多