LINQ运营商如中
问题描述:
HI,LINQ运营商如中
我有3个表:剪辑,书籍和之间的关系剪贴簿
问题是: 我需要得到书有bookID = 4我的意思是多对多
在简单的文本SQL它会是这样的:
select * from Clips where clipID in (select clipID from ClipBook where bookID=4)
的问题是:
我怎样才能做到这一点与的LINQ无需操作员加入当然
答
这可能是一个解决方案;
from cb in ClipBooks
where cb.BookID == 4
select cb.Clip;
或
ClipBooks.Where(cb => cb.BookId == 4).Select(cb => cb.Clip);
答
Contains方法是在LINQ的转换成IN操作,例如:
String[] cities = {"London", "Paris", "Madrid"};
from p in context.Person
where cities.Contains(p.Adress.City)
select p
被翻译成SQL子句等:.. WHERE a.City in ('London', 'Paris', 'Madrid')
其中a是后与Person联接的地址表别名表。
编辑:
你可以写没有一个子查询单查询,但这次将被转换为连接最有可能:
var clips = (from c in context.ClipBooks
where c.BookID == 4
select c.Clip).Distinct();
或
var clips = from c in context.Clip
where c.ClicBooks.Any(cb => cb.BookID == 4)
select c
任何被翻译成存在()
我不unterstand为什么你不想使用加入这一个。 – VVS 2008-11-14 09:45:19