如何在LINQ中将此T-SQL写入sQL?

时间:2010-12-23 10:37:14

标签: .net linq tsql linq-to-sql

select * from table1 where pkey1 in
(select pkey2 from table2 where column1='abc')

其中pkey1和pkey2都是int列。

5 个答案:

答案 0 :(得分:4)

类似的东西:

from t1 in table1
let x = from t2 in table2 where t2.column1.Equals("abc") select t2
where t1.pkey1.Equals(x.pkey2)
select t1;

你最终知道let可以帮助你做什么:)

答案 1 :(得分:2)

不是LINQ的答案,而是完全有效的LINQ-to-SQL之一:

var results = ctx.ExecuteQuery<Table1>(@"
    select * from table1 where pkey1 in
    (select pkey2 from table2 where column1='abc')").ToList();

你没有将每个查询的控制权移交给LINQ;实际上,在许多情况下,编写良好的自定义TSQL查询可以比从LINQ-to-SQL生成的查询更有效。这不是LINQ-to-SQL的批评(它对大多数简单的查询都很有帮助)。

答案 2 :(得分:2)

var query = from a in db.table1
            join b in db.table2 on a.pkey1 equals b.pkey2
            where b.column1 == "abc"
            select a;

答案 3 :(得分:2)

from t in table1
join u in table2 on t.pkey1 equals u.pkey2
where u.column1 == "abc"
select t;

答案 4 :(得分:0)

这是另一个可能的查询:

var q = from t2 in table2.Where(x => x.column1 == "abc")
        from t in table1.Where(x => x.pkey1 == t2.pkey2)
        select t;

根据您的使用方式,您可能需要在结果上调用Distinct()。生成的SQL等同于:

SELECT [t1].*
FROM table2 AS [t2], table1 AS [t1]
WHERE ([t2].[column1] = 'abc') AND ([t1].[pkey1] = [t2].[pkey2])