2009-10-30 81 views
0

让说,我有以下模式跨越多对多关系的LinqToSql查询?

Content(Id, ....) 
TagContent(TagId, ContentId) 
Tag(TagId, Name) 

假设我想选择一个有名字的“测试”标签的所有内容记录。

在SQL我会写:

select Content.Id 
from Content 
     join TagContent as TC on (TC.ContentId = Content.Id) 
     Join Tag on (TC.TagId = Tag.Id) 
where Tag.Name = 'Test' 

你可以建议如何,如果您有只写表Linq中类似的查询? (我想创建一个扩展方法Content.ByTag(“标签”) - > IQueryable的)

我只设法创建使用SQL语句exists代替join查询。 这意味着查询效率极低。

我目前低效的解决方案如下所示:

DataContext.Contents.Where(c => c.TagContents.Any(tc => tc.Tag.Name == "Test")) 

注: ,因为我想使扩展方法上DataContext.Contents我将无法访问其他表是的DataContext .Tag和DataContext.ContentTag。

回答

0

像这样的事情也许

var contentIds = from c in Content 
        join tc in TagContent on c.Id equals tc.ContentId 
        join t in Tag on tc.TagId equals t.Id 
        where t.Name == "Test" 
        select new 
        { 
         ContentId = c.Id 
        }; 
+0

在我的分机menthod我没有访问TagContents和标签 – 2009-10-30 15:57:13

+0

啊我看到你的问题。 – 2009-10-30 16:08:18