如何使用LINQ to SQL处理IN子查询?
时间:2020-03-05 18:49:52 来源:igfitidea点击:
我对此有些困惑。基本上,我想在LINQ to SQL中执行以下SQL查询:
SELECT f.* FROM Foo f WHERE f.FooId IN ( SELECT fb.FooId FROM FooBar fb WHERE fb.BarId = 1000 )
任何帮助将不胜感激。
谢谢。
解决方案
回答
尝试使用两个单独的步骤:
// create a Dictionary / Set / Collection fids first var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID); from f in Foo where fids.HasKey(f.FooId) select f
回答
from f in Foo where f.FooID == ( FROM fb in FooBar WHERE fb.BarID == 1000 select fb.FooID ) select f;
回答
试试这个
var fooids = from fb in foobar where fb.BarId=1000 select fb.fooID var ff = from f in foo where f.FooID = fooids select f
回答
看一下这篇文章。基本上,如果要获得IN的等效值,则需要先构造一个内部查询,然后使用Contains()方法。这是我的翻译尝试:
var innerQuery = from fb in FoorBar where fb.BarId = 1000 select fb.FooId; var result = from f in Foo where innerQuery.Contains(f.FooId) select f;
回答
var q = from t1 in table1 let t2s = from t2 in table2 where <Conditions for table2> select t2.KeyField where t2s.Contains(t1.KeyField) select t1;
var q = from t1 in table1 let t2s = from t2 in table2 where <Conditions for table2> select t2.KeyField where t2s.Any(t1.KeyField) select t1;
回答
var foos = Foo.Where<br> ( f => FooBar.Where(fb.BarId == 1000).Select(fb => fb.FooId).Contains(f.FooId));
回答
//首先创建一个Dictionary / Set / Collection fids
查找其他关节炎
var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID); from f in Foo where fids.HasKey(f.FooId) select f
回答
//首先创建一个Dictionary / Set / Collection fids
查找其他关节炎
var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID); from f in Foo where fids.HasKey(f.FooId) select f