我正在尝试做这样的事情:
Select * from A where id in (Select id_a from B)
但是在LINQ
db.A().Join(db.B(), a => a.id, b => b.id_a, (a , b) => new { a, b}).....
我可以加入。最好的方法是什么?或者我有其他选择?。
我正在使用实体框架
由于
答案 0 :(得分:0)
在LINQ lambda中使用子查询
var q = db.A.Where(a=> db.B.Select(b=>b.id_a).toList().Contains(a.Id)).Select(a=>a);
答案 1 :(得分:0)
在Linq,有很多方法可以表达这一点。 SQL也可以用不同的方式表示,最好的方法是使用EXISTS查询,例如:
Select * from A
where EXISTS (Select * from B where A.id = B.id_a)
这可以用Linq写成:
db.A.Where( a => db.B.Any( b => a.Id == b.Id_a ) );
答案 2 :(得分:0)
来自我的SQL to LINQ recipe:
将SQL转换为LINQ查询理解:
.Contains()
转换为NOT IN
和!
转换为Contains()
... SELECT *
,使用文字数组或数组变量作为常量列表。var id_aInB = from b in db.B select b.id_a;
var ans = from a in db.A where id_aInB.Contains(a.id) select a;
必须替换为select range_variable或者连接,一个包含所有范围变量的匿名对象。所以,对于你的SQL,
data$city_mpg
答案 3 :(得分:0)
也许您需要这个:
var result=db.A.Select(c=>new {c,listId=db.B.Select(s=>s.id_a)}).Where(w=>w.listId.Contains( w.c.id)).Select(c=>c.c);
或者您可以像这样使用LINQ
from a in db.A
let listId = from b in db.B
select b.id_a
where listId.Contains(a.id)
select a
顺便说一句,使用LINQPad,可以通过LINQ搜索获得正确的lamda