2011-09-23 109 views
0

我試圖學習實體框架,我需要一些幫助來構建我的查詢。 我有一個郵政類是這樣的:實體框架複雜查詢

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

我也有評論類:

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; 

感謝您的幫助

+0

那麼是什麼問題?例外?默認情況下EF不支持枚舉。你能使用PostStatus嗎? –

回答

0

經過一番研究,並使用你的答案,我發現好着呢是:

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

那麼你需要創建一個新的對象列表它。 像這樣

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()}; 
+0

我嘗試這個,但我得到以下錯誤:實體或複雜類型不能在LINQ to Entities查詢中構造。 – yamaneko

+0

好吧,我知道如何解決它 – Frederiek

0

這裏如何與至少一個發表評論僅選擇發佈的帖子:

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