2010-08-29 45 views
0

我有簡單的HQL查詢:NHibernate的輸出列/的createQuery的預測()名單()

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]); 

任何想法?

回答

3

的問題,您可以將開始它哈希表

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

所以我需要先創建一個帶有投影的特殊類?(AliasToEntityMap ??) – knagode 2010-08-30 11:39:38

+0

@knagode:不,AliasToEntityMap是內置的變換器;不需要做任何特別的事情。 – DanP 2010-08-30 14:10:08

+0

太棒了!在出現錯誤之前:名稱「AliasToEntityMap」在當前上下文中不存在。我必須將其更改爲: .SetResultTransformer(NHibernate.Transform.Transformers.AliasToEntityMap) – knagode 2010-08-30 23:17:53

1

不知道這個,但我認爲你需要創建一個類和項目。 這是我怎麼會通過接近它

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.

+0

我也需要添加: .SetResultTransformer(NHibernate.Transform .Transformers.AliasToBean(typeof運算(UserStatistics))); – knagode 2010-08-30 12:46:36

+0

添加SetResultTransformer來回答。還包括鏈接到一個解釋它更好的職位。 – 2010-08-31 07:11:39