Ter*_*rry 1 asp.net asp.net-mvc entity-framework code-first
我刚开始使用EF Code First来实现一个简单的博客.
我有一个Post对象,它有一个产品变量
virtual Product Product { get; set; }
Run Code Online (Sandbox Code Playgroud)
Product类有一组类别
virtual ICollection<Category> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)
最后该类别有一个集合帖子.
virtual ICollection<Post> Posts { get; set; }
Run Code Online (Sandbox Code Playgroud)
到目前为止,这一点运作良好.现在我想获得特定类别的帖子.我最初通过传递类别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));
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但我也使用CategoryRepository来获取我的类别.由于该类别有一个产品列表,而这些产品又有一个帖子列表,我认为最好只使用它,并从我的PostRepository中删除该类别.
但是,我遇到了一个问题.要获得帖子,我在我的控制器中使用它:
model.Category = _cr.GetCategory(catId);
model.Posts =
new PaginatedList<Post>(model.Category.Products.Select(p => p.Posts)
.AsQueryable(), pageNumber, _defaultPageSize);
Run Code Online (Sandbox Code Playgroud)
PaginatedList是NerdDinner接收IQueryable的那个.现在,这个错误,因为我传递了一个
IQueryable<ICollection<Post>>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何从我的Category实体中获得IQueryable?我确定答案很简单,但我一直在尝试各种组合无济于事.