2011-02-27 2 views
1

이제 막 EF Code First를 사용하여 간단한 블로그를 구현하기 시작했습니다. Entity Framework 탐색 ICollection을 IQueryable로 선택

나는 제품 클래스는
virtual ICollection<Category> Categories { get; set; } 

마지막 범주는 수집 게시물이 카테고리

의 컬렉션을 가지고

virtual Product Product { get; set; } 

변수 제품을 가진 후 개체가 있습니다.

virtual ICollection<Post> Posts { get; set; } 

이것은 지금까지 잘 수행되었습니다. 이제 특정 카테고리에 대한 게시물을 얻고 싶습니다. 나는 원래 카테고리 ID를 전달하여 내 PostRepository에서이 일을했다 : 이것은 좋은 작품과 같은

public IQueryable<Post> GetPosts(int catId) { 
    var q = _db.Posts.Select(p => p).Distinct(); 
    if (catId > 0) 
     q = q.Where(p => p.Product.Categories.Any(c => c.ID == catId)); 
} 

그러나 나는 또한 내 범주를 얻기 위해 CategoryRepository를 사용합니다. 카테고리에는 게시물 목록이있는 제품 목록이 있기 때문에이를 사용하고 PostRepository에서 카테고리를 제거하는 것이 더 좋을 것이라고 생각했습니다.

그러나 문제가 발생했습니다. 게시물을 얻으려면, 내가 내 컨트롤러에서 이것을 사용

model.Category = _cr.GetCategory(catId); 
model.Posts = 
    new PaginatedList<Post>(model.Category.Products.Select(p => p.Posts) 
       .AsQueryable(), pageNumber, _defaultPageSize); 

PaginatedList가 된 IQueryable에 복용 NerdDinner의 하나입니다. 자,이 오류는 내가 전달하고 있기 때문에

IQueryable<ICollection<Post>> 

그래서 내 질문은 어떻게 내 범주 엔터티에서 IQueryable을 얻을 수 있습니까? 나는 그 대답이 간단하다고 확신하지만 모든 종류의 조합을 쓸데없이 시도해 왔습니다.

답변

7

.SelectMany(p => p.Posts).AsQueryable()을 사용해 보셨습니까?

+0

아니요, 지금은 아닙니다! 고마워요 Ladislav. 나는 SelectMany에 대해서도 몰랐다. 그러나 지금 그것에 대해 읽은 후에, 그것이 내가 필요로했던 것이 명백하다. 다시 한 번 감사드립니다! – Terry

+0

나는 똑같은 상황을 겪고 있었다. 고마워! – mihkov

관련 문제