2016-06-23 4 views
0

にこのSQL SELECTを実行する必要があります。そして、C#は私はこの選択持ってLINQ

SELECT (MyFields) 
    FROM table1 T1 
    INNER JOIN table2 t2 ON t2.ID_t2 = T1.ID_T1 
    INNER JOIN 
    table3 t3 on t3.ID_t3=T1.ID_T1 and Left(t3.Other_t3_field,5)=t2.Another_t2_field 
WHERE (Conditions) 

、私はC#で試してみました:

var query = from T1 in table1 
    join t2 in table2 on T1.ID_T1 equals t2.ID_t2 
    join t3 in **table3** on T1.ID_T1 equals v.ID_t3 
    join t4 in **table3** on t2.Other_t2_field equals Microsoft.VisualBasic.Strings.Left(t2.Another_t3_field, 5) 
    where (Conditions) 
    select new 
    { 
     (My fields) 
    }; 

どちらの作品が、私のC#のクエリは、より多くの結果を持っていますSQL Select、私は何を間違っているのか分かりません。

+0

LINQ to what? Linqオブジェクト、SQL、EF、NHibernate?質問は、LINQ to Objectsを使用した場合にのみ意味があります。 ORMを使用すると、リレーションを定義し、プロバイダにジョインを生成させる必要があります –

答えて

1

まあ、私はC#で表3に参加変更することにより、を開始たい - 複数のフィールドに参加するために匿名型を使用します(私はあなたがSubstringの代わりに使用することができます願っていたい

join t3 in table3 on new { Id = t1.ID_T1, X = t2.AnotherT2Field.Substring(0, 5) } 
    equals new { Id = t3.ID_T3, X = t3.OtherT3Field.Substring(0, 5) } 

をここLeft ...それははるかに慣用的なC#のだ)

+0

実際、その余分なジョインが問題でした。私は本当に助けてくれてありがとう:D – Inikii

0

あなたは複数の匿名型で結合条件を追加することができます。

var query = from T1 in table1 
    join t2 in table2 on T1.ID_T1 equals t2.ID_t2 
    join t3 in **table3** on new { 
            ID = T1.ID_T1, 
            substring = t2.Other_t2_field 
           } equals new 
           { 
            ID = v.ID_t3, 
            substring = Microsoft.VisualBasic.Strings.Left(t2.Another_t3_field, 5) 
           } 
    where (Conditions) 
    select new 
    { 
     (My fields) 
    }; 

Jon Skeetの言葉通り、Leftの代わりにSubstringを使用することもできます。

関連する問題