[英]Many to Many Query in Entity Framework 4
我的数据库中有很多关系。 两个结束表是BlogPost和Item,中间的表是ItemBlogPost。 我需要找回与特定项目相关的所有BlogPost。 在SQL中,我会这样做:
SELECT BlogPost.*
FROM BlogPost
JOIN ItemBlogPost ON BlogPost.ID = ItemBlogPost.BlogPost_ID
WHERE ItemBlogPost.Item_ID = @Item_ID
在C#中我有类似的东西:
IQueryable<BlogPost> itemBlogPosts = from b in connection.BlogPosts
where b.Items == item.ID
orderby b.Content.CreateDate descending
select b;
但是,标记为b.Items的行没有给出Item属性的列表,并且没有b.ItemBlogPost来查看中间表。 我也尝试过做b.Items.Contains(item)
但也失败了。 如何在LINQ to EF4中完成这项工作?
那这个呢:
var itemBlogPosts = from i in connection.Items
from b in i.BlogPosts // I suppose you have a nav. property on Item
where i.Id == itemId
select b;
同样的查询也可以通过以下方式定义:
var itemBlogPosts = connection.Items
.Where(i => i.Id == itemId)
.SelectMany(i => i.BlogPosts);
你能做到这一点:
var itemBlogPosts = connection.Items.Single(b => b.ID == item.ID).BlogPosts;
由于您使用EF,它应该为您处理多对多映射,您应该将BlogPosts作为项目对象中的导航项。
如果:
然后:
这条路:
因此,当您手动拥有特定项目时,您可以通过以下方式创建相关博客帖子的集合:
Item item = context.Items.Include("BlogPosts").FirstOrDefault<Item>(i => i.ID = someID)
现在您有一个特定的项目,其中填充了博客帖子(如果有任何与此项目相关)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.