将嵌套的SQL语句转换为LINQ

时间:2015-03-13 21:37:27

标签: sql linq linq-to-sql

我需要帮助来弄清楚如何将以下sql语句转换为linq语句

SELECT distinct tableA.x, tableA.y, tableA.z
FROM tableA inner join
     tableB on tableA.id = tableB.id inner join
     tableC on tableA.id = tableC.id
WHERE (tableB.columnOne IN (SELECT tableX.columnOne
                            FROM tableX INNER JOIN
                            tableY ON tableX.xId = tableY.xId
                            WHERE (tableY.xId = tableC.xId) ) 
AND (tableB.columnTwo IN  (SELECT tableXx.columnTwo
                            FROM tableXx INNER JOIN
                            tableYy ON tableXx.XxId = tableYy.XxId
                            WHERE tableYy.XxId =tableC.XxId))) 
)

1 个答案:

答案 0 :(得分:0)

我想首先要指出的是你可以在LINQ中进行子查询。在你的主要Where子句中,你可以为你的子查询创建查询(这将导致IQueryable类型),然后使用.Any()来预测是否有任何匹配,例如。

var tableXquery = {my tableX subquery};
var tableXxquery = {my tableXx subquery};

var result = context.tableB.where(b => tableXquery.any(x => x.columnOne == b.columnOne) && xx => tableXxquery.any(xx => xx.columnTwo == b.columnTwo));

我希望你能得到这个想法 - 我只是倾向于将查询放在他们需要的位置,让LINQ对其进行排序!