Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
130 views
in Technique[技术] by (71.8m points)

c# - Many to Many Query in Entity Framework 4

I have have a many to many relationship in my database. The two end tables are BlogPost and Item and the table in the middle is ItemBlogPost. I need to get back all of the BlogPosts related to a specific item. In SQL I would do it like this:

SELECT BlogPost.*
FROM BlogPost
    JOIN ItemBlogPost ON BlogPost.ID = ItemBlogPost.BlogPost_ID
WHERE ItemBlogPost.Item_ID = @Item_ID

In C# I have something similar:

IQueryable<BlogPost> itemBlogPosts = from b in connection.BlogPosts
                                     where b.Items == item.ID 
                                     orderby b.Content.CreateDate descending
                                     select b;

However, the line marked b.Items doesn't give me a list of the Item properties and there is no b.ItemBlogPost to look at the intermediary table. I also tried doing b.Items.Contains(item) but that also failed. How can I make this work in LINQ to EF4?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

What about this:

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; 

The same query can be also defined by:

var itemBlogPosts = connection.Items
                              .Where(i => i.Id == itemId)
                              .SelectMany(i => i.BlogPosts);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...