NHibernate - 将结果作为IDictionary而不是IList

时间:2009-09-17 03:42:21

标签: c# nhibernate c#-3.0

我正在使用NHibernate作为持久层,我在代码中有很多地方需要检索特定表的所有列(例如在网格中显示)但我还需要一个快速的方法来获取此系列中的特定项目。

ICriteria API让我可以将查询结果作为T的唯一值或T的IList。 我想知道是否有办法让NHibernate给我这些对象作为IDictionary,其中对象的Id中的键和值是对象本身。自己动手会让我遍历整个原始列表,这个列表不是很容易扩展。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您使用的是.NET 3.5,则可以使用Enumerable()中的IQuery方法,然后使用IEnumerable<T>.ToDictionary()扩展方法:

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

这样,列表就不会重复两次。

你提到使用ICriteria,但它没有提供一种懒惰地枚举项目的方法,而IQuery则提供。

但是,如果查询返回的项目数太大,您可能需要考虑使用您对IDictionary实例使用的密钥查询数据库。