linq运营商喜欢

时间:2008-11-14 09:40:50

标签: asp.net-mvc linq

HI,

我有3个表:剪辑图书以及 ClipBook

之间的关系

问题是: 我需要 bookID = 4 bookID = 4 ,其中一些剪辑是指多对多

在简单的文本sql中它将是这样的:

select * from Clips where clipID in (select clipID from ClipBook where bookID=4)

问题是:

如何使用 Linq 执行此操作加入

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

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表连接后的Address表别名。

编辑:

你可以在没有子查询的情况下编写单个查询,但这很可能会转换为连接:

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

任何内容均在Exists()

中翻译

答案 2 :(得分:1)

这可能是一个解决方案;

from cb in ClipBooks
where cb.BookID == 4
select cb.Clip;

ClipBooks.Where(cb => cb.BookId == 4).Select(cb => cb.Clip);
相关问题