我有如下查询:
select column_a, (select column_a from table_b where b.column_c = a.column_c) column_b
from table_a a where a.test = 1 order by a.number
我知道我可以在linq中执行连接但在linq中有类似的东西吗?
答案 0 :(得分:2)
这是SQL语句的直接翻译:
from a in table_a
where a.test == 1
orderby a.number
let column_b = (from b in table_b where b.column_c == a.column_c select b.column_a).SingleOrDefault()
select new { a.column_a, column_b }
请记住,这是一个嵌套循环,因此如果它是一个简单的LINQ to Objects查询,它就具有二次性能。在T-SQL示例中,优化器知道如何将子查询转换为连接。
答案 1 :(得分:0)
使用'加入'方法:http://msdn.microsoft.com/en-us/library/bb311040.aspx
在声明性语法中:
from item_a in table_a
join item_b in table_b on item_a.column_c equals item_b.column_c
where item_a.test == 1
orderby item_a.number
select new {column_a = item_a.column_a, column_b = item_b.column_a};
在方法语法中:
table_a.Where (item_a => item_a.test == 1)
.Join(table_b,
(item_a) => item_a.column_c,
(item_b) => item_b.column_c,
(item_a, item_b) => new { column_a = item_a.column_a, column_b = item_b.column_a });
有关可运行的LinqPad代码段,请参阅this gist。