2017-11-14 6 views
2

지난 5 시간 동안이 문제를 파악하려고했지만 해결책을 찾지 못했습니다. C# Entity Framework complex join

는 기본적으로 나는 다음과 같은

Table1Name, t2_1, t2_2 
t1_1,  v11 , 
t1_2,   , v12 

중 하나를 얻으려고 노력이 데이터

Table1 
    ID Name 
    1  t1_1 
    2  t1_2 


Table2 
    ID Name 
    1  t2_1 
    2  t2_2 


Table12 
    ID Table1 Table2 Value 
    1  1   1  v11 
    2  2   2  v12 

아래 ExcelPackage와 엑셀을 만들려고하고 얻을에있는 행 EF의 방법이 이 형식? 내가 붙어있는 곳은 Table1의 각 레코드에 대해 Table1 레코드 (Table12의 행을 Table1의 열로 바꾸는 종류)를 사용하지 않고 비어 있으면 null (Table12의 값)이있는 Table2의 모든 레코드를 가져 오려고합니다.

감사

답변

2
var info = (from t1 in Table1     
      from t2 in Table2 
      join t120 in Table12 
      on new {Table1 = t1.ID, Table2 = t2.ID} equals new {t120.Table1, t120.Table2} into t12s 
      from t12 in t12s.DefaultIfEmpty() 
      group new { t2, t12 } by new { t1.ID, t1.Name } into sub 
      select new 
      { 
       sub.Key.Name, 
       data = sub.Select(x => new { x.t2.Name, x.t12 == null ? null : x.t12.Value }).ToList() 
      }).ToList(); 

foreach(var item in info) 
{ 
    Console.Write($"{item.Name}\t"); 
    foreach(sub in item.data.OrderBy(x => x.Name)) 
     Console.Write($"{sub.Name}:{sub.Value}\t"); 
    Console.WriteLine(""); 
} 
+0

이 t1.Name 선택 측면에서 현재 컨텍스트에 존재하지 않는 말한다 새 {...} – Bhavesh

+0

그 – Bhavesh

+0

@Bhavesh 당신이 바로, 또한 내가 업데이트 대답 왼쪽으로 sub.key해야 가정 어울리다. –