C# 子对象上的NHibernate OrderBy投影

C# 子对象上的NHibernate OrderBy投影,c#,nhibernate,sql-order-by,queryover,nhibernate-projections,C#,Nhibernate,Sql Order By,Queryover,Nhibernate Projections,我有两个实体organizationmember和User organizationmember具有类型为User的名为User的对象属性 我正在尝试编写一个NHibernate查询,该查询将由用户执行不区分大小写的查询。电子邮件属性。。。(用户在各种情况下向系统中键入电子邮件) 我已经看到,您可以使用SQLFunction投影来基本上大写DB中的所有内容,并以此排序。但我无法将其应用于子对象。这是我到目前为止所拥有的 var query = Session.QueryOver<Organ

我有两个实体
organizationmember
User

organizationmember
具有类型为
User
的名为
User
的对象属性

我正在尝试编写一个NHibernate查询,该查询将由
用户执行不区分大小写的查询。电子邮件
属性。。。(用户在各种情况下向系统中键入电子邮件)

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

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();
有什么想法吗?

你必须:

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中,您始终必须显式地进行
联接
。没有隐式联接。

您必须:

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中,您始终必须显式地进行
联接
。没有隐式联接。

谢谢。。。我试试看。谢谢。。。我试试看。