2016-09-19 20 views
0

次のクエリを自己結合でLINQ式に変換しようとしています。自己結合を含む複数の結合にLINQを書き込む方法は?

select r2.* from depends d 
    join request r on d.DESC =r.DESC 
    join request r2 on d.ID=r2.ID 
    and d.TYPE ='sometype' 
where r.ID= 12345 

上記の正しいSQLクエリに一致するように、次のLINQクエリを修正するにはどうすればよいですか。

var result = (from d in depends 
      join r in request on d.DESC equals r.DESC 
      join r2 in request on d.ID == r2.ID && d.TYPE == incomingType.ToString() 
      where r.ID == incomingId 
      select r2).AsEnumerable(); 
+0

最初に、SQLクエリに自己結合はなく、1つの同じテーブルへの2つの結合だけです。第2に、SQLクエリが奇妙で矛盾しています。 'd.TYPE = 'sometype'と' r.ID = 12345'の両方の条件が1つのテーブルに関係しているため、 'where'句に入れるだけです。 –

答えて

1

なぜあなたは、簡単な使用あなたのincomingType場合Where句が固定されないのですか? LINQ Joining in C# with multiple conditions

例::複数の構文ここに示すように、結合条件を

もあり

var result = (from d in depends 
       where d.TYPE == incomingType.ToString() 
       join r in request on 
       new { ID = r.ID, desc = r.DESC } 
       equals 
       new { ID = d.ID, desc = d.DESC } 
       where r.ID == incomingId 
       select r).AsEnumerable(); 

をごincomingTypeが実際に固定されていない場合、それは、dependsテーブルからあなたをその値を取得します結合条件に3番目のパラメータを追加するだけです。

var result = (from d in depends 
       where d.TYPE == incomingType.ToString() 
       join r in request on 
       new { ID = r.ID, desc = r.DESC, type = r.someType1 } 
       equals 
       new { ID = d.ID, desc = d.DESC, type = d.someType2 } 
       where r.ID == incomingId 
       select r).AsEnumerable(); 
関連する問題