【发布时间】:2010-09-08 06:10:37
【问题描述】:
我对此有点困惑。基本上我想在 LINQ to SQL 中执行以下 SQL 查询:
SELECT f.*
FROM Foo f
WHERE f.FooId IN (
SELECT fb.FooId
FROM FooBar fb
WHERE fb.BarId = 1000
)
如有任何帮助,我们将不胜感激。
【问题讨论】:
标签: sql linq linq-to-sql
我对此有点困惑。基本上我想在 LINQ to SQL 中执行以下 SQL 查询:
SELECT f.*
FROM Foo f
WHERE f.FooId IN (
SELECT fb.FooId
FROM FooBar fb
WHERE fb.BarId = 1000
)
如有任何帮助,我们将不胜感激。
【问题讨论】:
标签: sql linq linq-to-sql
尝试使用两个单独的步骤:
// 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
【讨论】:
看看this article。基本上,如果你想得到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));
【讨论】:
//首先创建一个字典/集合/集合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
【讨论】:
//首先创建一个字典/集合/集合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
【讨论】:
from f in foo
where f.FooID equals model.FooBar.SingleOrDefault(fBar => fBar.barID = 1000).FooID
select new
{
f.Columns
};
【讨论】: