将NHibernate查询结果转换为字典

将NHibernate查询结果转换为字典,hibernate,nhibernate,linq-to-nhibernate,queryover,Hibernate,Nhibernate,Linq To Nhibernate,Queryover,我有一个Nhibernate查询,它返回两列(string和bool)。我想把结果转换成字典。我知道有变压器可用,但我不知道如何让它工作 Session.QueryOver<Customer>() .Where(x => x.Id == XXX) .Select(x => x.Name, x => x.Moderator) Session.QueryOver() .其中(x=>x.Id==XXX) .选择(x=>x.名称,x=>x.主持人) 我认为

我有一个Nhibernate查询,它返回两列(string和bool)。我想把结果转换成字典。我知道有变压器可用,但我不知道如何让它工作

Session.QueryOver<Customer>()
    .Where(x => x.Id == XXX)
    .Select(x => x.Name, x => x.Moderator)
Session.QueryOver()
.其中(x=>x.Id==XXX)
.选择(x=>x.名称,x=>x.主持人)
我认为没有内置的转换器可以做到这一点(您可以自己编写),但它可能很简单,在返回查询结果后编写一点LINQ就足够了

这取决于你想让你的字典看起来像什么,但这里有一个例子可能会有所帮助。假设您想要获取一个字典,其中键为
true
false
,表示版主和非版主,值为带有版主姓名的
列表。在这种情况下,你可以写:

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());
IDictionary-mediatordictionary=session.QueryOver()
.选择(
x=>x.Name,
x=>x.主持人
)
.List()
.GroupBy(x=>(bool)x[1],x=>(字符串)x[0])
.ToDictionary(grp=>grp.Key,grp=>grp.ToList());
使用
List
通常对可维护性不是很好,但是对于这样的两个属性,它可能没问题。如果要处理更多属性,最好创建一个类并使用
AliasToBean
将每一行转换为该类的实例。

我认为没有内置的转换器可以做到这一点(您可以自己编写),但是,在获取查询结果之后编写一点LINQ就足够了,这可能非常简单

这取决于你想让你的字典看起来像什么,但这里有一个例子可能会有所帮助。假设您想要获取一个字典,其中键为
true
false
,表示版主和非版主,值为带有版主姓名的
列表。在这种情况下,你可以写:

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());
IDictionary-mediatordictionary=session.QueryOver()
.选择(
x=>x.Name,
x=>x.主持人
)
.List()
.GroupBy(x=>(bool)x[1],x=>(字符串)x[0])
.ToDictionary(grp=>grp.Key,grp=>grp.ToList());

使用
List
通常对可维护性不是很好,但是对于这样的两个属性,它可能没问题。如果要处理更多属性,最好创建一个类并使用
AliasToBean
将每一行转换为该类的实例。

字典中的键是什么<代码>名称
主持人
?词典中的键是什么<代码>名称
主持人
?你为什么要返回
IDictionary
而不是
IDictionary
,跳过我认为他不需要的
GroupBy
。这肯定是OP想要的。问题中没有足够的信息可以确定。为什么你要返回
IDictionary
,而不是
IDictionary
,并跳过
GroupBy
,我认为他不需要。这肯定是OP想要的。问题中没有足够的信息可以确定。