2017-11-14 7 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とExcelを作成しようとしています

は、内の行を取得するにはEFでの方法がありますこの形式?テーブル1の各レコードについて、テーブル1のレコード(テーブル1の行をTable1の列に変換する種類)を繰り返さずに空の場合はnullを返します。

おかげ

答えて

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 sub.key – Bhavesh

+0

あるべきと仮定参加する。 –

関連する問題