将NHibernate QueryOver结果转换为Dictionary

时间:2016-05-03 19:08:07

标签: hibernate nhibernate linq-to-nhibernate queryover

我有Nhibernate查询,它给了我两个列(字符串和bool)。我想将结果转换为字典。我知道有变形金刚可用,但我不知道如何使这个工作

Session.QueryOver<Customer>()
    .Where(x => x.Id == XXX)
    .Select(x => x.Name, x => x.Moderator)

1 个答案:

答案 0 :(得分:0)

我不认为有一个内置的变换器可以做到这一点(你可以编写自己的),但是在获得查询结果之后编写一些LINQ可能很简单很好。

这取决于你希望你的字典看起来像什么,但这里有一个可能有帮助的例子。假设您想要一个字典,其中密钥为truefalse,代表版主和非版主,值为List<string>,其中包含版主的名称。在这种情况下,你可以写:

IDictionary<bool, List<string>> moderatorDictionary = session.QueryOver<Customer>()
    .Select(
        x => x.Name,
        x => x.Moderator
    )
    .List<object[]>()
    .GroupBy(x => (bool)x[1], x => (string)x[0])
    .ToDictionary(grp => grp.Key, grp => grp.ToList());

使用List<object[]>通常不太适合可维护性,但对于这样的两个属性,它可能没问题。如果您正在使用更多属性,最好创建一个类并使用AliasToBean将每一行转换为该类的实例。