我正在使用NHibernate作为持久层,我在代码中有很多地方需要检索特定表的所有列(例如在网格中显示)但我还需要一个快速的方法来获取此系列中的特定项目。
ICriteria API让我可以将查询结果作为T的唯一值或T的IList。 我想知道是否有办法让NHibernate给我这些对象作为IDictionary,其中对象的Id中的键和值是对象本身。自己动手会让我遍历整个原始列表,这个列表不是很容易扩展。
谢谢。
答案 0 :(得分:1)
如果您使用的是.NET 3.5,则可以使用Enumerable()
中的IQuery
方法,然后使用IEnumerable<T>.ToDictionary()
扩展方法:
var dictionary = query.Enumerable().ToDictionary(r => r.Id);
这样,列表就不会重复两次。
你提到使用ICriteria,但它没有提供一种懒惰地枚举项目的方法,而IQuery则提供。
但是,如果查询返回的项目数太大,您可能需要考虑使用您对IDictionary实例使用的密钥查询数据库。