2009-09-17 38 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