1

我有 2 个实体OrganisationMemberUser

AnOrganisationMember有一个User类型为 的对象属性User

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

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

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

有任何想法吗 ?

4

1 回答 1

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

于 2013-09-13T11:53:50.277 回答