仅使用linq从相关表中选择某些项目

时间:2010-03-10 12:55:57

标签: c# linq

您好我有2个表BlogPost和BlogComments

我希望获得所有状态为“已发布”的BlogPost。 并获取状态为“已发布”的每个帖子的所有BlogComments。

我正在使用这样的东西来获取博客帖子:

var BlogPosts = (from p in db.BlogPosts where p.State == State.Published select p).ToArray();

但由于与BlogComments的关系,它可以自动拥有所有BlogComments(包括已发布和未发布的)。

我如何才能获得每个博文(即已批准的博文)的“已发布”评论

感谢

3 个答案:

答案 0 :(得分:4)

尝试选择新的BlogPostViewModel,类似于BlogPost,但使用IEnumerable<BlogComment>,只需选择博客帖子数据和已发布评论的集合。

    select new BlogPostViewModel {
        Title = p.Title,
        Body = p.Body,
        Comments = p.Comments.Where( c => c.Published );
    });

BlogPostViewModel的位置:

public class BlogPostViewModel
{
     public string Title { get; set; }
     public string Body { get; set; }
     public IEnumerable<BlogComment> Comments { get; set; }
}

答案 1 :(得分:0)

var BlogPosts = from p in db.BlogPosts where p.State == State.Published select new {
    Post = p,
    Comments = (from c in db.BlogComments where c.State == State.Published && c.Post = p select c)
};

答案 2 :(得分:0)

var publishedComments = db.BlobPosts.Where(p => p.State == State.Published)
                                    .SelectMany(p => p.Comments)
                                    .Where(c => c.State == State.Published);

很抱歉没有使用查询语法。希望这会让你继续前进。