2012-04-05 51 views
0

我想了解如何在LINQ中重写连接查询。来自sql加入的LINQ

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 Samples](http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9)。该链接专门用于连接,对您而言将是一个很好的起点。 – Craig 2012-04-05 16:01:44

回答

3

您需要使用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} 

如果你想改写这个作为EXISTS因为需要从q_table只能输出:

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

嗯,现在遇到一个问题,比较一个int到一个字符串cs.qk等于pl.qck。我试过使用SqlFunctions.StringConvert,但那也不起作用。 – Mustang31 2012-04-05 17:41:36

+0

好吧,似乎SQLFunctions不支持与Oracle EF – Mustang31 2012-04-05 22:00:06

0

你试过使用显式连接?

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