2009-12-08 104 views
2

如何使用nhibernate選擇5個隨機記錄。如何使用nhibernate獲得隨機行?

我的SQL是這樣的:

SELECT TOP 5 u.UserId, u.UserName, p.ImageFileName FROM users as u, profiles as p WHERE u.UserId = p.UserId ORDER BY NEWID() 

我試圖這樣做,但它不工作

IList<User> users = session 
         .CreateCriteria(typeof(User)) 
         .CreateCriteria("Profile") 
         .Add<Profile>(p => p.ImageFileName != string.Empty) 
         .AddOrder(Order.Asc("NEWID()")) 
         .SetMaxResults(5) 
         .List<User>(); 
+1

類似於http: //stackoverflow.com/questions/729687/how-do-i-select-a-random-row-using-nhibernates-icriteria-api。 – Joel 2009-12-08 20:02:08

回答

1

您可以使用的SQLQuery:

var query = 
    "SELECT TOP 5 u.UserId, u.UserName, p.ImageFileName " + 
    "FROM users as u, profiles as p " + 
    "WHERE u.UserId = p.UserId ORDER BY NEWID()"; 

ISQLQuery qry = session.CreateSQLQuery(query).AddEntity(typeof(User)); 
List<User> rndUsers = qry.List<User>(); 
+0

請注意,Joel Potter在評論中提到的問題有一個更優雅的答案。 – 2009-12-13 03:31:26

+0

你可以使用這種不連續?我有一個類似的問題,並想到該解決方案,但我需要應用預定義的Disjunction對象。 – Astaar 2012-05-05 12:33:37

+0

您可以提供任何你喜歡的SQL - 這是NHIbernate,但它只是創建一個將由數據庫運行的SQL查詢。但是,如果您沒有隨機訂購,您將始終獲得相同的記錄。 – 2012-05-05 16:45:58