이제 막 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을 얻을 수 있습니까? 나는 그 대답이 간단하다고 확신하지만 모든 종류의 조합을 쓸데없이 시도해 왔습니다.
아니요, 지금은 아닙니다! 고마워요 Ladislav. 나는 SelectMany에 대해서도 몰랐다. 그러나 지금 그것에 대해 읽은 후에, 그것이 내가 필요로했던 것이 명백하다. 다시 한 번 감사드립니다! – Terry
나는 똑같은 상황을 겪고 있었다. 고마워! – mihkov