#c# #sql #nhibernate #queryover
#c# #sql #nhibernate #выполнение запроса
Вопрос:
У меня есть две сущности, которые:
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();
Ответ №1:
Это было бы способом, который можно использовать 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();