【发布时间】:2011-02-27 13:01:06
【问题描述】:
我刚刚开始使用 EF Code First 来实现一个简单的博客。
我有一个包含产品变量的 Post 对象
virtual Product Product { get; set; }
Product 类有一个类别的集合
virtual ICollection<Category> Categories { get; set; }
该类别终于有了一个集合 Posts。
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 是来自 NerdDinner 的一个接收 IQueryable 的列表。现在,这个错误是因为我传入了一个
IQueryable<ICollection<Post>>
所以我的问题是如何从我的 Category 实体中获取 IQueryable?我确信答案很简单,但我一直在尝试各种组合都无济于事。
【问题讨论】:
标签: asp.net asp.net-mvc entity-framework code-first