Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分页搜索结果_C#_Asp.net_.net_Entity Framework_Search - Fatal编程技术网

C# 分页搜索结果

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() =

我刚刚读完了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() == 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);