来自sql联接的LINQ
本文关键字:LINQ sql 来自 | 更新日期: 2023-09-27 18:30:03
我正在尝试了解如何在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'
谢谢你的帮助。
您需要使用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}
他们最终都应该得到相同的结果。我将把性能检查留给您:)
您尝试过使用显式联接吗?
from pl in location_table
join cs in q_table on cs.qk equals pl.qck
where s. att5 == 'process'
&& pl. location == 'there'