如何使用NHibernate获取不同的首字母列表

时间:2010-07-06 09:17:01

标签: c# nhibernate

我已经进入了一个使用MVC2&的项目中间。 NHibernate的。我之前没有使用NHibernate,所以就像这个问题一样简单,我有点超出我的深度。

我必须为许多公司组创建一个目录。第一项任务是获得每个公司的第一个字母的明确列表。

所以,如果我们有

ACompany1
ACompnay2
BCompany1
DCompany1
DCompany2
ECompany1

我需要获得一个像

这样的列表
  

A B D E(注意,没有'C')

有人可以请我概述一下我需要做什么吗?感谢

3 个答案:

答案 0 :(得分:3)

假设班级名称为Company且属性为Name ...

var groups = session.CreateQuery(
                    "select distinct substring(Name, 1, 1) from Company")
                    .List<string>()

答案 1 :(得分:1)

我想知道你是否从错误的方向接近这个问题。 NHibernate用于将数据库对象映射到域对象。您可以创建一些使用公式来获取不同字符的自定义映射文件,但我认为这是一个简单的SQL查询就足够了的情况之一。

替代方案是将所有公司加载到内存中并使用linq获取名称。

companies.Select(company => company.Name.Substring(0, 1));

在使用模拟框架并且努力模拟某个特定实体时,我有时会蒙上眼睛,直到我退后一步才意识到模仿我自己的实体会更容易和更清晰。

答案 2 :(得分:0)

首先,您需要决定如何使用sql。可能你会使用某种SUBSTRING函数。解决之后,您可以编写类似的HQL查询。