C# 分页搜索结果
我刚刚读完了Mike的精彩教程: 我正在使用SQL CE 4.0和实体F/W ADO.NET,我的搜索查询是:C# 分页搜索结果,c#,asp.net,.net,entity-framework,search,C#,Asp.net,.net,Entity Framework,Search,我刚刚读完了Mike的精彩教程: 我正在使用SQL CE 4.0和实体F/W ADO.NET,我的搜索查询是: foreach(string term in query) { var products = database.Products.Where(p => p.PartNumber.ToLower().Contains(term.ToLower()) || p.PartNumber.ToLower() =
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行只取下@1行代码>在我的查询版本中?如何在EF ado.net中编写它
我希望这是有意义的。您正在寻找的是LINQ方法和。Skip()用于跳过记录-查询的偏移量@0行部分。Take()用于指定要返回的行数-查询的下一个@1行部分
因此,从页面返回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是件好事,因为 假设我正确理解您的问题,您应该结合使用以下方法:
非常感谢。分页的工作方式是。。。只是,它不再返回任何结果。
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);