假设我有以下架构
Content(Id, ....)
TagContent(TagId, ContentId)
Tag(TagId, Name)
假设我想选择所有标记为“test”的内容记录。
在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'
如果您只有Table可用,您能否建议如何在Linq中编写类似的查询? (我想创建一个扩展方法Content.ByTag('tag') - > IQueryable)
我只设法创建一个使用sql exists
语句而不是join
的查询。
这意味着查询效率极低。
我目前效率低下的解决方案如下:
DataContext.Contents.Where(c => c.TagContents.Any(tc => tc.Tag.Name == "Test"))
注意: 因为我想在DataContext.Contents上创建扩展方法,所以我将无法访问其他表,即DataContext.Tag和DataContext.ContentTag。
答案 0 :(得分: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
};