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分组,但我只能到此为止。
这将为您做:
我写了对我的一些实体的原始查询,然后通过并重新命名为你的表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()
});