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();