【问题标题】:Paging Search Results分页搜索结果
【发布时间】:2012-07-31 15:48:46
【问题描述】:

我刚刚读完 Mike 的精彩教程:http://www.mikesdotnetting.com/Article/150/Web-Pages-Efficient-Paging-Without-The-WebGrid

我正在使用带有实体 F/W ADO.NET 的 SQL CE 4.0,我的搜索查询是:

foreach(string term in query)
{
        var products = database.Products.Where(p =>
                p.PartNumber.ToLower().Contains(term.ToLower()) ||
                p.PartNumber.ToLower() == term.ToLower() || p.OProductName.ToLower().Contains(term.ToLower()) || p.OProductName.ToLower() == term.ToLower());
}

在 Mike 的搜索查询中:

sql = "Select Title, ISBN, Description, FirstName, LastName, Category From Books " + 
           "Inner Join Authors on Books.AuthorId = Authors.AuthorId " + 
           "Inner Join Categories on Books.CategoryId = Categories.CategoryId " +
           "Order By BookId OFFSET @0 ROWS FETCH NEXT @1 ROWS  ONLY;";

var result = db.Query(sql, offset, pageSize);

他使用正常的“WebMatrix 方式”对数据库执行选择查询。

让我卡住的部分是如何在我的查询版本中写下他的OFFSET @0 ROWS FETCH NEXT @1 ROWS ONLY;?如何在 EF ado.net 中编写?

我希望这是有道理的。

【问题讨论】:

    标签: c# asp.net .net entity-framework search


    【解决方案1】:

    假设我正确理解您的问题,您应该结合使用Skip 方法和Take 方法:

    var query =
    from product in database.Products
    // where product.Property == "some value" // or whatever your where clause is
    select product;
    
    var queryPage = query.Skip(itemsPerPage * pageIndex).Take(itemsPerPage);
    

    【讨论】:

      【解决方案2】:

      您正在寻找的是 LINQ 方法 Skip()Take()。 Skip() 允许您跳过记录 - 查询的 OFFSET @0 ROWS 部分。 Take() 允许您指定要返回的行数 - 查询的 FETCH NEXT @1 ROWS ONLY 部分。

      因此,您从页面 Page 返回 PageSize 项目的代码可能如下所示:

          var products = database.Products.Where(p =>
                  p.PartNumber.ToLower().Contains(term.ToLower()) ||
                  p.PartNumber.ToLower() == term.ToLower() || p.OProductName.ToLower().Contains(term.ToLower()) || p.OProductName.ToLower() == term.ToLower())
                  .OrderBy(p => p.PartNumber)
                  .Skip((Page - 1) * PageSize).Take(PageSize);
      

      编辑:您还需要在 Skip() 之前输入 OrderBy(),因为只能跳过有序查询。例如,您可能希望按零件号订购。

      顺便说一句,您使用 SQL CE 4.0 是件好事,就像previous versions did not support Skip() in EF!

      【讨论】:

      • 非常感谢。分页正常工作......只是,它不再返回任何结果。
      猜你喜欢
      • 2014-03-26
      • 2017-02-24
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      相关资源
      最近更新 更多