Я только начал использовать EF Code First для реализации простого блога.
У меня есть объект Post, у которого есть переменная продукта
virtual Product Product { get; set; }
Класс Product имеет коллекцию категорий
virtual ICollection<Category> Categories { get; set; }
Наконец-то у категории есть коллекция сообщений.
virtual ICollection<Post> Posts { get; set; }
Пока это хорошо работает. Теперь я хочу получать сообщения для определенной категории. Первоначально я делал это в своем 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 от NerdDinner принимает IQueryable. Теперь это ошибки, потому что я передаю в
IQueryable<ICollection<Post>>
Итак, мой вопрос: как я могу получить IQueryable из моей категории? Я уверен, что ответ прост, но я пробовал все виды комбинаций безрезультатно.