[英]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.