【问题标题】:pagination in asp.net mvcasp.net mvc中的分页
【发布时间】:2012-05-03 05:13:58
【问题描述】:

我有类别和子类别。每个子类别都有一些产品。 例如编程类别有 | C# , java , 基本子类别 |其中 c# 有 c# 3 , c# 3.5 产品 | java有java ee、java me等

我想从使用 linq to EF 的类别中选择 10 个产品。

问题是我不想从数据库中加载所有产品,然后对它们进行排序,然后选择其中的 10 个。

我想要一个解决方案,我可以只从数据库中获取 10 个产品,而无需将所有产品从数据库传输回 Web 服务器。

我知道 EF 很贪心,只会拿 10 个产品并跳过一些。但在我的情况下,我有类别和子类别,所以我认为我应该首先从属于一个类别的不同子类别中选择所有产品,并将它们附加到导致将所有产品带到服务器的列表中,然后选择其中的 10 个。

最好的做法是什么,这样我就不必将所有产品都转移到服务器上?

【问题讨论】:

标签: c# asp.net-mvc linq entity-framework pagination


【解决方案1】:

您可以在一个查询中完成此操作:

var pagedProducts = _db.Categories.Join( 
    _db.Products,
    c => c.CategoryId,
    p => p.CategoryId,
    (Category, Products) =>
       new
       {
           CategoryType = Category,
           ItsProducts  = Products
       })
        .OrderBy(g => g.Category.Name)
        .Skip((CurrentPage - 1) * pageSize)
        .Take(pageSize);

【讨论】:

  • 排序呢?它不应该先排序然后分页吗?如何排序?
  • @cSharpper,您应该在TakeSkip 之前OrderBy 以使分页正确获取页面,或者至少保持默认顺序。
  • 你的代码是正确的,但我终于写了这段代码: var categoryModel = storeDB.Categories.Single(c => c.CategoryId == categoryId); var subCategoriesModel = storeDB.SubCategories.Where(c => c.CategoryId == categoryModel.CategoryId); var subcategoriesID = subCategoriesModel.Select(s => s.SubCategoryId).ToList(); var products = (from p in storeDB.Products where subcategoriesID.Contains(p.SubCategoryId) select p).OrderBy(p => p.ProductId).Skip((page - 1) * pageSize).Take(pageSize);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多