Сложный запрос Entity Framework - PullRequest
       2

Сложный запрос Entity Framework

0 голосов
/ 23 сентября 2011

Я пытаюсь изучить Entity Framework, и мне нужна помощь для построения моего запроса.У меня есть класс Post, подобный этому:

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;}
}

У меня также есть класс Comment:

public class Comment
{
    public int CommentID {get;set;}
    public string Content {get;set;}
    public CommentStatus Status {get;set;}
}

Я хочу получить всю статью со статусом == PostStatus.Published, включаяКомментарий с состоянием == CommentStatus.Published.

Как вы понимаете, я хочу отобразить в блоге всю опубликованную статью с опубликованным комментарием.

Я получаю всю опубликованную статью со всеми комментариями, ноЯ только хочу получить их опубликованные комментарии, а не ожидающие их рассмотрения.

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

Спасибо за вашу помощь

Ответы [ 3 ]

0 голосов
/ 23 сентября 2011

Здесь можно выбрать только опубликованные сообщения с хотя бы одним опубликованным комментарием:

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()
                    };
0 голосов
/ 27 сентября 2011

После некоторых исследований и использования ваших ответов, я обнаружил, что хороший путь:

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();
0 голосов
/ 23 сентября 2011

ну, вам нужно создать новый список объектов с ним.Как то так

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()};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...