【问题标题】:NHibernate output columns/projections of CreateQuery().list()CreateQuery().list() 的 NHibernate 输出列/投影
【发布时间】:2010-08-29 23:35:17
【问题描述】:

我有简单的 HQL 查询:

var list = OpenSession()
              .CreateQuery("SELECT MAX(p.price) as max_price, 
                                   COUNT(p.id) as count_all 
                            FROM Order o left join o.Products p")
              .List();

我想尽可能简单地输出“max_price”和“count_all”列/投影。

类似:

Console.WriteLine(list[0]["max_price"]);
Console.WriteLine(list[0]["count_all]);

有什么想法吗?

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    你可以把它转换成Hashtable

    .SetResultTransformer(Transformers.AliasToEntityMap).List<HashTable>()[0]["max_price"];
    

    【讨论】:

    • 所以我需要先创建一个带有投影的特殊类?(AliasToEntityMap??)
    • @knagode:不,AliasToEntityMap 是一个内置的转换器;不需要做任何特别的事情。
    • 太棒了!在我遇到错误之前:当前上下文中不存在名称“AliasToEntityMap”。我不得不将其更改为: .SetResultTransformer(NHibernate.Transform.Transformers.AliasToEntityMap)
    • 应该是 Hashtable 而不是 HashTable。
    【解决方案2】:

    对此不确定,但我认为您需要创建一个类并对其进行项目。 这就是我开始接近它的方式

    class UserStatistics{
     MaxPrice {get; set;}
     CountAll {get; set;}
    }
    
    var list = OpenSession()
                  .CreateQuery("SELECT MAX(p.price) as max_price, 
                                       COUNT(p.id) as count_all 
                                FROM Order o left join o.Products p")
                  .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(UserStatistics)))
                  .List<UserStatistics>();
    

    那应该是个问题

    Console.WriteLine(list[0].MaxPrice);
    Console.WriteLine(list[0].CountAll);
    

    Great Post explaining better.

    【讨论】:

    • 我还需要添加:.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(UserStatistics)));
    • 添加了 SetResultTransformer 来回答。还包括一个帖子的链接,可以更好地解释它。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多