2015-09-10 5 views
2

У меня есть 3 таблицы в этой иерархии:Linq множественной группы по и присоединяется

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; } 
} 

I может присоединиться ко всему, а затем группе по Table1, но это насколько я могу идти.

Любая помощь с примером будет замечательной.

ответ

1

Это будет делать это для вас:

Я написал оригинальный запрос к некоторым из моих сущностей, а затем прошел и переименовал их в свой Table1/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() 
}); 
+0

Я надеялся увидеть один запрос, но это отлично работает! Благодаря! –

+1

Вы определенно можете поместить его в один запрос - он может выглядеть немного беспорядочным - вы должны заменить «table3Join» первым запросом и заменить «sqlQuery» на второй – Rob

+0

@JasonFoglia. Также - выше, даже с отдельные части, попадут только в базу данных - если это вас беспокоит – Rob

Смежные вопросы