Linq多组由和连接

本文关键字:连接 Linq | 更新日期: 2023-09-27 18:12:15

在这个层次结构中有3个表:

Table1 [1 to many]
   --> Table2 [1 to many]
          --> Table3 [many]

我想实现:

var finalResult = (List<TableResult1>)linqQuery.ToList(); 
public class TableResult1
{
    public string Key { get; set; }
    public List<TableResult2> ListTableResult2 { get; set; }
}
public class TableResult2
{
    public string Key { get; set; }
    public List<TableResult3> ListTableResult3 { get; set; }
}
public class TableResult3
{
    public string Key { get; set; }
}

模型如下:

public class Table1
{
    public int Id { get; set; }
    public string SomeProperty { get; set; }
}
public class Table2
{
    public int Id { get; set; }
    public int Table1Id { get; set; }
    public string SomeProperty { get; set; }
}
public class Table3
{
    public int Id { get; set; }
    public int Table2Id { get; set; }
    public string SomeProperty { get; set; }
}

我可以加入所有的东西然后按Table1分组,但我只能到此为止。

Linq多组由和连接

这将为您做:

我写了对我的一些实体的原始查询,然后通过并重新命名为你的表1/2/3 -我可能错过了一些东西,所以可能有一个语法错误或两个,但它应该工作

var table3Join =
    Table2
    .GroupJoin(
        Table3,
        ttwo => ttwo.Id,
        tthree => tthree.Table2Id,
        (ttwo, tthree) => new { ttwo = ttwo , tthree = tthree }
    );
var sqlQuery = 
    Table1
    .GroupJoin(
        table3Join, 
            tone => tOne.Id,
            twwo => twwo.ttwo.Table1Id,
            (tone, ttwo) => new { tone = tone, ttwo = ttwo }
    ).ToList();
var tableResults = sqlQuery.Select(r => new TableResult1
{
    Key = r.tone.Id,
    ListTableResult2 = r.ttwo.Select(ttwo => new TableResult2
    {
        Key = ttwo.ttwo.Id,
        ListTableResult3 = ttwo.tthree.Select(tthree => new TableResult3
        {
            Key = tthree.Id
        }).ToList()
    }).ToList()
});