NHibernate OrderBy对子对象的投影

时间:2013-09-13 11:40:27

标签: c# nhibernate sql-order-by queryover nhibernate-projections

我有2个实体OrganisationMemberUser

OrganisationMember有一个名为User的{​​{1}}对象属性。

我正在尝试编写一个NHibernate查询,它将通过User属性执行不区分大小写的索引...(用户在各种情况下将电子邮件键入系统)。

我已经看到你可以使用SQLFunction Projection来基本上大写数据库中的所有内容并按顺序排序。但我无法将其应用于子对象。这是我到目前为止所拥有的。

User.Email

它一直告诉我它不知道投影中的“电子邮件”是什么。我也尝试将投影改为

var query = Session.QueryOver<OrganisationMembership>();

query.RootCriteria.SetFetchMode("User", FetchMode.Eager);

var projection = Projections.SqlFunction("UPPER", NHibernateUtil.String, Projections.Property("Email"));

query.OrderBy(projection).Asc();

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你必须:

User user = null;

query.JoinAlias(p => p.User, () => user);

相当于

query.JoinAlias(p => p.User, () => user, JoinType.InnerJoin);

然后

projection = Projections.SqlFunction("UPPER", 
                                     NHibernateUtil.String,
                                     Projections.Property(() => user.Email));

在NHibernate中,你必须明确地制作Joins。没有隐式连接。