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

C# 仅使用linq从相关表中选择某些项,c#,linq,C#,Linq,嗨,我有两个表BlogPost和BlogComments 我想获得所有已发布状态的博客帖子。 并获取每个已发布状态的帖子的所有博客评论 我用这样的东西来获取博客帖子: var BlogPosts = (from p in db.BlogPosts where p.State == State.Published select p).ToArray(); 但由于与博客评论的关系,它自动拥有所有已发布和未发布的博客评论 我怎样才能获得每个博客帖子的已发布评论,即已批准的评论 谢谢尝试选择一个新的B

嗨,我有两个表BlogPost和BlogComments

我想获得所有已发布状态的博客帖子。 并获取每个已发布状态的帖子的所有博客评论

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

var BlogPosts = (from p in db.BlogPosts where p.State == State.Published select p).ToArray();
但由于与博客评论的关系,它自动拥有所有已发布和未发布的博客评论

我怎样才能获得每个博客帖子的已发布评论,即已批准的评论


谢谢

尝试选择一个新的BlogPostViewModel,它类似于BlogPost,但使用了IEnumerable,只使用blog post数据和已发布评论的集合

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


尝试选择一个新的BlogPostViewModel,它类似于BlogPost,但使用IEnumerable,只使用blog post数据和已发布评论的集合

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

很抱歉没有使用查询语法。希望这会让你走上正轨


很抱歉没有使用查询语法。希望这会让你走上正轨。

我试过这个。。。从db.BlogPosts中的p返回,其中p.State==State.Published选择newblogpost{Title=p.Title,Body=p.Body,blogcoments=p.blogcoments.Wherec=>c.State==State.Published}.ToArray;但是getting无法将ienumerable转换为entityset…:我建议使用一个单独的ViewModel类型,它类似于BlogPost,将注释作为IEnumerableCould,我只需更改私有entityset\u BlogComments;字段转换为designer.cs文件中的一个不可数字段?@raklos-不,你不会想这样做的。如果更改模型,对设计器所做的任何更改都会消失。您可能可以添加一个使用EntitySet(如果可用)的分部类实现,但允许您重写它,但这很难看而且容易出错。不管怎样,视图特定的模型通常是一种方法——以所需的形式为显示逻辑提供所需的数据。使用视图模型将视图与数据模型进一步分离,因为您可以根据需要更改视图模型,而无需更改基础数据模型。我尝试过这个。。。从db.BlogPosts中的p返回,其中p.State==State.Published选择newblogpost{Title=p.Title,Body=p.Body,blogcoments=p.blogcoments.Wherec=>c.State==State.Published}.ToArray;但是getting无法将ienumerable转换为entityset…:我建议使用一个单独的ViewModel类型,它类似于BlogPost,将注释作为IEnumerableCould,我只需更改私有entityset\u BlogComments;字段转换为designer.cs文件中的一个不可数字段?@raklos-不,你不会想这样做的。如果更改模型,对设计器所做的任何更改都会消失。您可能可以添加一个使用EntitySet(如果可用)的分部类实现,但允许您重写它,但这很难看而且容易出错。不管怎样,视图特定的模型通常是一种方法——以所需的形式为显示逻辑提供所需的数据。使用视图模型将视图与数据模型进一步分离,因为您可以根据需要更改视图模型,而无需更改基础数据模型。
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)
};
var publishedComments = db.BlobPosts.Where(p => p.State == State.Published)
                                    .SelectMany(p => p.Comments)
                                    .Where(c => c.State == State.Published);