NHibernate OrderBy 子对象上的投影

本文关键字:投影 对象 OrderBy NHibernate | 更新日期: 2023-09-27 18:31:08

我有 2 个实体OrganisationMemberUser

OrganisationMember具有一个名为 User 的对象属性

,类型为 User

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

我已经看到您可以使用 SQLFunction 投影基本上将数据库中的所有内容大写并按此排序。 但是我在将其应用于子对象时遇到问题。这是我到目前为止所拥有的。

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

一直告诉我,它不知道投影中的"电子邮件"是什么。我还尝试将投影更改为

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

有什么想法吗?

NHibernate OrderBy 子对象上的投影

您必须:

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。没有隐式联接。

相关文章: