2011-02-27 61 views
1

我刚开始使用EF Code First来实现一个简单的博客。实体框架选择导航ICollection As IQueryable

我有具有可变

virtual Product Product { get; set; } 

一个产品的产品类有类别

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?我相信答案很简单,但我一直在尝试各种组合,无济于事。

回答

7

你试过.SelectMany(p => p.Posts).AsQueryable()

+0

不,我没有,但我现在已经!谢谢拉迪斯拉夫。我甚至不知道SelectMany,但现在阅读后很明显这是我所需要的。再次感谢! – Terry 2011-02-27 13:41:31

+0

我有同样的情况,谢谢! – mihkov 2016-05-17 12:38:49