我有一个这种类型的设置数据表.
表A.
AID AName --------------------- 1 A_Name1 2 A_Name2 3 A_Name3
表B.
BID BName --------------------- 10 B_Name1 20 B_Name2 30 B_Name3
表C.
AID BID --------------------- 1 10 2 10 2 20 2 30 3 20 3 30
我想使用LINQ编写一个查询,对于给定的A的ID,我给出了不在表C中的B列表.
因此,对于1的AID,我希望BID为20和30.
对于AID为3,我希望BID为10
对于2的AID,没有任何返回任何返回.
我知道SQL会
SELECT B.BID FROM B LEFT OUTER JOIN C ON C.BID = B.BID AND A.AID = 1 -- AID would change based on which I was looking for, 1, 2, or 3
什么是LINQ等效?
请假设我有相应的A,B和C表的对象.
对于LinqToSql,数据库优化器将适当地处理这个问题.使用"不是任何"模式.
IQueryable query = db.BTable .Where(b => !db.CTable .Where(c=> c.AID == 1) .Any(c => c.BID == b.BID) )
对于LinqToObjects,我们不想枚举BList中每个项目的CList.做一次枚举.
ListBIDList = CList .Where(c => c.AID == 1) .Select(c => c.BID) .ToList(); IEnumerable query = BList .Where(b => !BIDList.Contains(b.BID));