Asp.net mvc 3 实体框架复杂查询

Asp.net mvc 3 实体框架复杂查询,asp.net-mvc-3,entity-framework,linq-to-entities,Asp.net Mvc 3,Entity Framework,Linq To Entities,我正在尝试学习实体框架,我需要一些帮助来构建我的查询。 我有一个这样的博士后班: public class Post { public int PostID {get;set;} public string Title {get;set;} public string Content {get;set;} public PostStatus Status {get;set;} public IList<Comment> Comments {ge

我正在尝试学习实体框架,我需要一些帮助来构建我的查询。 我有一个这样的博士后班:

public class Post
{
    public int PostID {get;set;}
    public string Title {get;set;}
    public string Content {get;set;}
    public PostStatus Status {get;set;}
    public IList<Comment> Comments {get; set;}
}
我想要的是检索所有状态为==PostStatus.Published的文章,包括状态为==CommentStatus.Published的评论

正如你所理解的,我想在博客中显示所有发表的文章及其发表的评论

我检索所有发表的文章和所有评论,但我只想得到他们发表的评论,而不是挂起的评论

var result = from art in context.Posts.Include("Comments")
             where art.Status == PostStatus.Published
             select art;

感谢您的帮助

您需要用它创建一个新的对象列表。 像这样的

var result = from art in context.Posts.Include("Comments").ToList()
             where art.Status == PostStatus.Published
             select new Post { PostID=art.PostID, Title=art.Title, Content=art.Content, Status=art.Status, Comments=art.Comment.Select(comment => comment.Status == CommentStatus.Published).ToList()};

如何仅选择至少有一条已发布评论的已发布帖子:

var result = from p in context.Posts
             .Include("Comments")
             from c in p.Comments
             where p.Status == PostStatus.Published &&
                   c.Status == CommentStatus.Published
             select new Post {
                      PostID = p.PostID, 
                      // ... other members of Post
                      Comments = p.Comments
                             .Where(c2 => c2.Status == CommentStatus.Published).ToList()
                    };

经过一些研究并使用您的答案,我发现最好的方法是:

context.Posts.Where(p=> p.InternalStatus == (int)PostStatus.Published).ToList()
    .Select(item =>
                    new Post
                        {
                            PostID = item.PostID,
                            Title = item.Title,
                            Author = item.Author,
                            Content = item.Content,
                            DateCreation = item.DateCreation,
                            Status = item.Status,
                            Comments =
                                item.Comments.Where(
                                    comment => comment.InternalStatus == (int) CommentStatus.Approved).ToList()
                        }).AsQueryable();

那么问题是什么呢?例外?默认情况下,EF不支持枚举。您可以使用PostStatus吗?我尝试了一下,但出现了以下错误:无法在LINQ to Entities查询中构造实体或复杂类型。
context.Posts.Where(p=> p.InternalStatus == (int)PostStatus.Published).ToList()
    .Select(item =>
                    new Post
                        {
                            PostID = item.PostID,
                            Title = item.Title,
                            Author = item.Author,
                            Content = item.Content,
                            DateCreation = item.DateCreation,
                            Status = item.Status,
                            Comments =
                                item.Comments.Where(
                                    comment => comment.InternalStatus == (int) CommentStatus.Approved).ToList()
                        }).AsQueryable();