2012-04-05 13 views
0

LINQで結合クエリを書き換える方法を理解しようとしています。LINQ from sql join

SELECT cs.qid,cs.qk FROM location_table pl 
JOIN (SELECT qid,qk FROM q_table WHERE att5 = 'process') cs ON pl.qck = cs.qk 
WHERE pl.location = 'there' 

は、ここで私が使用を開始LINQですが、それは、上記のSQLのようにあなたの助けを

from pl in location_table 
from cs in q_table 
where s. att5 == 'process' 
&& cs.qk == pl.qck 
&& pl. location == 'there' 

おかげで同じ結果を返すされていません。

+0

は、[101個のLINQサンプル(http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9)を見てください。そのリンクは特に結合のためのもので、あなたのための良い出発点になります。 – Craig

答えて

3

あなたがq_tableからの出力のみが必要とされているのでEXISTSとしてこれを書き換えたい場合はjoinキーワード

from pl in location_table 
join cs in q_table 
    on cs.qk equals pl.qck 
where cs.att5 == ‘process’ && pl. location == ‘there’ 
select new{cs.qid, cs.qk} 

を使用する必要があります。

SELECT qid,qk 
FROM q_table AS cs 
WHERE EXISTS 
    (
     SELECT 1 
     FROM location_table pl 
     WHERE pl.qck = cs.qk AND pl.location = 'there' 
    ) 
    AND cs.att5 == 'process' 

あなたはこれだろう。

from cs in q_table 
where location_table.All(pl=>pl.qck == cs.qk && pl.location == 'there') 
    && cs.att5 == 'process' 
select new{cs.qid, cs.qk} 

これらの結果はすべて同じ結果に終わるはずです。私はあなたにパフォーマンスチェックを残します:)

+0

Hmmm、intを文字列と比較する問題に遭遇しました。cs.qkはpl.qckと等しくなりました。私はSqlFunctions.StringConvertを使用してみましたが、どちらも動作していません。 – Mustang31

+0

SQLFunctionsはOracle EFでサポートされていないようです – Mustang31

0

明示的な結合を使ってみましたか?

from pl in location_table 
join cs in q_table on cs.qk equals pl.qck 
where s. att5 == 'process' 
&& pl. location == 'there'