2012-05-21 50 views
0

這已被問過很多次,但我無法找到一個結論性的答案。任何人都可以協助nhibernate選擇n個隨機唯一記錄

我希望能夠使用nhibernate查詢我的數據庫(將我的sqlServer和mysql)爲了獲得X的行數。這些數字需要是唯一的。我選擇了350中的250,所以我的可能性很高,我會有重複(因爲隨機doent意味着獨特)

這需要爲mysql和sql server工作。

,因爲我選擇在桌子上的70%了,我不介意選擇的所有記錄,並使用LINQ to PUL了250個唯一值(如果可能的話)

任何具有影響最小我的系統開銷。

謝謝!

回答

0

您可以使用RAND()或NEWID()命令查詢結果並選擇前250個結果 - 效率方面,結果將是截然不同的隨機數據,這將比檢索所有350個結果更有效,然後對它們進行排序隨機在代碼中 - 如果你忽略緩存

但是,如果你確實緩存了結果,那麼隨着時間的推移將350個結果檢索到緩存(最好使用NHibernate的二級緩存)然後將它們排序代碼使用類似:

var rand = new Random();  
var results = Session.CreateCriteria<MyClass>() 
    .SetCacheable(true) 
    .List() 
    .OrderBy(x => rand.Next()); 
0

您正在尋找獨特的,在.ToList()之前添加.Distinct()

0

我想你已經回答了你自己。

350個記錄A的全表查詢將要少放應變在服務器上比250複雜的隨機化和分頁查詢(即通常是通過在內部查詢追加一個唯一標識符的行,然後用它排序完成。你不能用LINQ做到這一點)

你甚至可以緩存結果,然後隨機在內存中的列表每次獲得250個不同的記錄。