【问题标题】:Entity Framework Select Navigation ICollection As IQueryable实体框架选择导航 ICollection 作为 IQueryable
【发布时间】: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


    【解决方案1】:

    你试过.SelectMany(p =&gt; p.Posts).AsQueryable()吗?

    【讨论】:

    • 不,我没有,但我现在有!谢谢拉迪斯拉夫。我什至不知道 SelectMany,但现在阅读它之后,很明显这就是我所需要的。再次感谢!
    • 我也遇到了同样的情况,谢谢!
    猜你喜欢
    • 2017-03-12
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多