2

私はマイクの素晴らしいチュートリアルを読み終えました: 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 でどのように記述すればよいですか?

これが理にかなっていることを願っています。

4

2 に答える 2

3

私があなたの質問を正しく理解していると仮定すると、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);
于 2012-08-02T16:19:14.463 に答える
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() をスローする必要もあります。そのため、たとえば、部品番号で注文することができます。

余談ですが、以前のバージョンでは EF で Skip() がサポートされていなかったため、SQL CE 4.0 を使用しているのは良いことです。!

于 2012-08-02T16:18:50.920 に答える