我有两个实体:
User { UserGuid, Address, . . . EmailCount // This is not a column in the database, // I just wanna get the count number from the UserEmail table // and map the value to this property } UserEmail { UserGuid, Timestamp }
问题是如何在NHibernate中通过子查询获取电子邮件计数?
到目前为止,我有这个功能,但是它不起作用。任何的想法?
User userEntity = null; var subQuery = QueryOver.Of<UserEmail>() .Where(ue => ue.UserGuid == userEntity.UserGuid) .ToRowCountQuery(); return _session.StatefulSession.QueryOver(() => userEntity) .WithSubquery.WhereValue("EmailCount").Eq(subQuery) .List();
这就是使用语法subquery获取内联 计数 的方法QueryOver:
subquery
QueryOver
User userEntity = null; var subQuery = QueryOver .Of<UserEmail>() .Where(ue => ue.UserGuid == userEntity.UserGuid) .ToRowCountQuery(); var list = _session.StatefulSession .QueryOver<User>(() => userEntity) .SelectList(projections => projections .Select(x => x.UserGuid) .WithAlias(() => userEntity.UserGuid) .Select(x => x.Address) .WithAlias(() => userEntity.Address) // any property to be selected ... // INLINE COUNT // our subquery placed into play .SelectSubQuery(subQuery) // this will populate virtual/not mapped EmailCount .WithAlias(() => userEntity.EmailCount) ) .TransformUsing(Transformers.AliasToBean<User>()) //.Take(10).Skip(100) // paging .List();