2017-12-11 4 views
0

두 테이블 : BlogPost이 있습니다. 블로그 테이블에는 여러 개의 게시물이있을 수 있습니다.자식 요소를 n 개 얻으십시오

해당 게시물이있는 블로그를 받고 싶습니다. 블로그 당 4 개의 게시물 만 있고 4 개의 게시물 만있는 경우에만 표시하고 싶습니다. 또한, 그 후, 나는 Automapper 사용하여 내 모델에 결과를 매핑 할 싶습니다

return _context.Blogs 
       .Include(x => x.Posts) 
       .Where(x => x.IsActive && x.Posts.Count >= 4) 
       .ProjectTo<BlogVm>(); 

BlogVmBlog 엔티티와 같은 속성을 (같은 포스트 함께)이 포함되어 있습니다. EntityFrameworkCore를 사용하고 있습니다.

어떻게 처리 할 수 ​​있습니까?

업데이트 : 코드는 블로그 당 모든 게시물을 반환합니다. 4 블로그는 최소 4 개의 게시물을 보유하고 4 개의 게시물 만로드하고 싶습니다.

+0

나는 이해할 수 없다. 무슨 문제 야? 당신은 이미 해결책을 가지고 있지 않습니까? 코드가 작동하지 않습니까? – GGO

+0

작동하지 않는 기능은 무엇입니까? 대응하고있는 오류가 있습니까? – Abbas

+0

내 게시물을 업데이트했습니다. 뭐가 잘못 되었 니. 기본적으로 결과에는 블로그 당 모든 게시물이 포함됩니다. – Cieja

답변

-1

나는 (테스트하지) 작동하는지 모르겠지만, 당신은 당신의 포함에 받아 사용해야합니다

return _context.Blogs 
       .Include(x => x.Posts.Take(4)) 
       .Where(x => x.IsActive && x.Posts.Count >= 4) 
       .ProjectTo<BlogVm>(); 
+1

해당 컨텍스트에서 'Take'를 사용할 수 없으며 'Where()'와 'ProjectTo'사이에 있어야합니다. – stuartd

+1

아니, 작동하지 않아. Message = "x => {x.Posts => Take (4)} '속성식이 올바르지 않습니다. 식은 속성 액세스를 나타내야합니다 :'t => t.MyProperty ' – Cieja

+0

감사합니다. 피드백 – OrcusZ

0

을보십시오이 : 네 개 이상의와

var postsFromBlogsWithAtLeastFourPosts = 
    blogs.Where(blog => blog.Posts.Count() >= 4) 
     .Select(blog => blog.Posts.Take(4)) 
     .ProjectTo<BlogVm>(); 

먼저 선택 블로그 게시물. 그런 다음 각 블로그에서 4 개의 게시물을 선택하십시오.

또는 4 개 이상의 게시물 (블로그 당 하나의 게시물)이있는 블로그에서 총 4 개의 게시물을 원하셨습니까?

var postsFromBlogsWithAtLeastFourPosts = 
    blogs.Where(blog => blog.Posts.Count() >= 4) 
     .Take(4) 
     .Select(blog => blog.Posts.First()) 
     .ProjectTo<BlogVm>(); 
-1

(모델에 매핑 제외)이 시도 :

var q = (
     from blog in _context.Blogs 
     from post in blog.Posts 
     group blog by new 
         { 
          BlogId = blog.Id, 
          PostId = post.Id, 
          PostText = post.Text, 
         } 
     into g 
     where g.Count() >= 4 
     select new 
       { 
        g.Key.BlogId, 
        g.Key.PostId, 
        g.Key.PostText 
       } 
     ).Take(4); 

또는 유사한 : 오류가

var q1 = _context.Blogs.SelectMany(blog => blog.Posts, (blog, post) => new { blog, post }) 
         .GroupBy(@t => new { BlogId = blog.Id, PostId = post.Id, PostText = post.Text }, @t => blog) 
         .Where(g => g.Count() >= 4) 
         .Select(g => new { g.Key.BlogId, g.Key.PostId, g.Key.PostText }) 
         .Take(4); 

있습니다. 결과에서 단 4 개의 행이 필요합니다. Take (4)가 없으면 모든 블로그에 블로그 당 최소 4 개의 게시물이 있습니다.