Kamil Kliczbor @ asptip.net

31Jan/110

101 przykładów zapytań w NHibernate 3.x – HQL, Criteria API, QueryOver i Linq – Dzielenie danych

Wprowadzenie

Wpis ten jest częścią artykułu poświęconemu wykonywaniu zapytań w NHibernate przy użyciu różnych sposobów jakie udostępnia ten mapper - HQL, Criteria API, QueryOver i Linq.

Część ta opisuje stosowanie dzielenie danych, tj otrzymywanie części wyników zapytania w określonych porcjach. W MS-SQLu można te zagadnienia zrealizować odpowiednio przy użyciu instrukcji

  • TOP - pobiera określoną liczbę pierwszych wyników zapytania
  • TOP wraz z ROW_NUMBER OVER (ORDER BY ...) - umożliwia pobranie "strony" wyników

Spis zapytań

Do poczytania

Pobranie pierwszych wyników - instrukcja TOP

SQL

SELECT TOP ( 3 ) this_.ProductId       as ProductId6_0_,
                   this_.ProductName     as ProductN2_6_0_,
                   this_.QuantityPerUnit as Quantity3_6_0_,
                   this_.UnitPrice       as UnitPrice6_0_,
                   this_.UnitsInStock    as UnitsInS5_6_0_,
                   this_.UnitsOnOrder    as UnitsOnO6_6_0_,
                   this_.ReorderLevel    as ReorderL7_6_0_,
                   this_.Discontinued    as Disconti8_6_0_,
                   this_.SupplierId      as SupplierId6_0_,
                   this_.CategoryId      as CategoryId6_0_
FROM   Products this_

Zapytania

// HQL
// see https://forum.hibernate.org/viewtopic.php?f=1&t=933173
this.Session.CreateQuery("select p from Product p")
    .SetMaxResults(3)
    .List<Product>();

// Criteria API
this.Session.CreateCriteria(typeof(Product))
    .SetMaxResults(3)
    .List<Product>();

// QueryOver
this.Session.QueryOver<Product>()
    .Take(3)
    .List<Product>();

// LINQ
this.Session
    .Query<Product>()
    .Take(3)
    .ToList();

Pobranie określonej "strony" - instrukcja TOP i ROW_NUMBER OVER

SQL

SELECT   TOP ( 3 ) ProductId6_0_,
                     ProductN2_6_0_,
                     Quantity3_6_0_,
                     UnitPrice6_0_,
                     UnitsInS5_6_0_,
                     UnitsOnO6_6_0_,
                     ReorderL7_6_0_,
                     Disconti8_6_0_,
                     SupplierId6_0_,
                     CategoryId6_0_
FROM     (SELECT this_.ProductId                    as ProductId6_0_,
                 this_.ProductName                  as ProductN2_6_0_,
                 this_.QuantityPerUnit              as Quantity3_6_0_,
                 this_.UnitPrice                    as UnitPrice6_0_,
                 this_.UnitsInStock                 as UnitsInS5_6_0_,
                 this_.UnitsOnOrder                 as UnitsOnO6_6_0_,
                 this_.ReorderLevel                 as ReorderL7_6_0_,
                 this_.Discontinued                 as Disconti8_6_0_,
                 this_.SupplierId                   as SupplierId6_0_,
                 this_.CategoryId                   as CategoryId6_0_,
                 ROW_NUMBER()
                   OVER(ORDER BY CURRENT_TIMESTAMP) as __hibernate_sort_row
          FROM   Products this_) as query
WHERE    query.__hibernate_sort_row > 5 
ORDER BY query.__hibernate_sort_row

Zapytania

// HQL
this.Session.CreateQuery("select p from Product p")
    .SetMaxResults(3)
    .SetFirstResult(5)
    .List<Product>();

// Criteria API
this.Session.CreateCriteria(typeof(Product))
    .SetMaxResults(3)
    .SetFirstResult(5)
    .List<Product>();

// QueryOver
this.Session.QueryOver<Product>()
    .Take(3)
    .Skip(5)
    .List<Product>();

// LINQ
this.Session
    .Query<Product>()
    .Take(3)
    .Skip(5)
    .ToList();
http://msdn.microsoft.com/en-us/library/ms189463.aspxTOP
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

No trackbacks yet.