Nhibernate使用HQL返回自定义类型

本文介绍如何使用HQL返回自定义类型的集合,并通过示例演示如何获取按客户名计数的统计信息。文章提供了具体的代码实现及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:使用HQL返回自定义类型的结果集。

前提:已经定义好Customer类及其Nhibernate映射文件xml。

表结构及数据

image

自定义类

image

Mapping文件

image

条件查询(Criteria Query)

public IList<CustomerFirstnameCounter> GetCustomerFirstnameCounts()
        {
            ISession session = GetSession();
            return session.CreateQuery(@"select new CustomerFirstnameCounter(c.Firstname,count(c.Firstname)) 
            from Customer c group by c.Firstname")
                .List<CustomerFirstnameCounter>();
        }

输出SQL

NHibernate: select customer0_.Firstname as col_0_0_, count(customer0_.Firstname) as col_1_0_ from Customer customer0_ group by customer0_.Firstname

说明

CustomerFirstnameCounter中的Count属性必须定义为long类型,如果定义为int类型,则会报如下错误:

Test method DataAccessLayer.Test.NhibernateDataProviderTest.GetCustomerFirstnameCountsTest threw exception: 
NHibernate.QueryException: Unable to locate appropriate constructor on class [DataTransfer.CustomerFirstnameCounter, DataTransfer] [select new CustomerFirstnameCounter(c.Firstname,count(c.Firstname)) 
            from DataTransfer.Customer c group by c.Firstname] ---> NHibernate.InstantiationException: no constructor compatible with (System.String, System.Int64) found in class: DataTransfer.CustomerFirstnameCounter

转载于:https://www.cnblogs.com/joe-yang/archive/2010/08/25/1808496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值