我刚开始使用EF Code First来实现一个简单的博客。
我有一个Post对象,它有一个产品变量
virtual Product Product { get; set; }
Product类有一组类别
virtual ICollection<Category> Categories { get; set; }
最后,该类别有一个集合帖子。
virtual ICollection<Post> Posts { get; set; }
到目前为止一直运作良好。现在我想获得特定类别的帖子。我最初在我的PostRepository中通过传递类别ID来执行此操作:例如
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>>
所以我的问题是如何从我的Category实体获得IQueryable?我确信答案很简单,但我一直在尝试各种组合无济于事。
答案 0 :(得分:7)
你试过.SelectMany(p => p.Posts).AsQueryable()
吗?