2011-03-22 19 views
3

我有一個訂單表叫和我有一個所謂的最後更新列(並用LASTUPDATE財產的訂單對象)的查詢。我想用nhibernate構造一個查詢來獲得最後50行,所以我不去數據庫並獲取所有內容,然後必須在我的應用程序中篩選結果。,我如何構建想要最新的50行

這是可能的NHibernate的。我想如果你使用的是標準,然後使用SetMaxResults(50)和做的日期時間降序排序使用LINQ API

回答

4

下面是該查詢的LINQ版本。

var orders = session.Query<Order>() 
    .OrderByDescending(x => x.LastUpdate) 
    .Take(50); 

下面的代碼示例的屏幕截圖...

Code example

下面是從NHibernate的探查器屏幕截圖...

NHibernate profiler example

+0

試過了,它似乎沒有在數據庫級別執行過濾器。當我運行nhibernate分析器時,我發現它返回了所有的記錄。 – leora 2011-03-23 00:06:57

+0

我想你想session.Linq () – 2011-03-23 00:09:32

+0

NHibernate的3.0.0.4000,這增加了頂(50)到SQL Server。和LINQ的()語法已取代查詢()。探測器即將推出的照片。 – 2011-03-23 00:50:39

4

+0

你知道它是否可以通過LINQ API? – leora 2011-03-23 00:06:11

1

你可以使用SetMaxResults(50),雖然取決於你想要的50行(最新的?first?last?),你可能還需要做一個SortBy表達式。

1
var orders = session.Query<Linq>() 
    .OrderByDescending(x => x.LastUpdate) 
    .Take(50); 
1

在一般情況下建議LastUdate c使用Linq2SQL可以爲空,你可以在你的IQueriable中寫入擴展方法:

public static partial class FooTable 
{ 
    public static IQueryable<FooTable> LastUpdated(this IQueryable<FooTable> queryable, int count) 
    { 
     return queryable.Where(x => (x.LastUdate != null)) 
      .OrderByDescending(x => x.LastUdate) 
      .Take(count); 
    } 
} 
相關問題