2009-09-17 40 views
1

我使用NHibernate作爲持久層,我在我的代碼中有很多地方需要檢索特定表的所有列(在網格中顯示例如),但我也需要一個快速的方法來從這個集合中獲得特定的項目。NHibernate - 獲取結果作爲IDictionary而不是IList

的的ICriteria API讓我得到查詢結果無論是作爲T的獨特價值或T. 的IList的我不知道是否有一種方法可以讓NHibernate的給我的那些對象作爲一個IDictionary,其中在對象的關鍵Id和值是對象本身。自己這樣做會使我遍歷原始列表,這是不可擴展的。

謝謝。

回答

1

如果您正在使用.NET 3.5的工作,你可以使用Enumerable()方法從IQuery,然後使用IEnumerable<T>.ToDictionary()擴展方法:

var dictionary = query.Enumerable().ToDictionary(r => r.Id); 

這樣,該列表將不會被兩次以上重複。

你提到使用ICriteria,但它沒有提供一種方式來懶惰地枚舉項目,而IQuery的。

但是,如果查詢返回的項數太大,則可能需要考慮使用針對IDictionary實例使用的鍵來查詢數據庫。

+0

謝謝傑羅姆,你知道爲什麼ICriteria接口不提供Enumerable()方法嗎?爲什麼我應該在ICriteria上使用IQuery? – 2009-10-04 13:35:58