NHibernateをIQueryOverで使用してList<Message>
を取得しています。ユーザーはMessage
をお気に入りに設定できます。各Message
は、少なくともUser
の1つがMessage
をお気に入りとしてマークした場合、true
を含むプロパティpublic bool IsFavourite
を持っています。 私の質問では、SelectSubQuery
を使用して、お気に入りとしてマークされた回数を取得します。ここまでは順調ですね。また、サブクエリの結果をIsFavourite
に設定する条件で使用したいとします。SelectSubQueryの結果をNHibernate QueryOverの条件で使用する
私の質問は今のようになります。私はIsFavourite
プロパティを設定することができるように
Message messageAlias = null;
MessageDTO messageDto = null;
var messages = GetSessionFactory().GetCurrentSession()
.QueryOver<Message>(() => messageAlias)
.SelectList(list => list
.Select(() => messageList.Id).WithAlias(() => messageDto.Id)
.Select(() => messageList.Title).WithAlias(() => messageDto.Title)
.SelectSubQuery(
QueryOver.Of<UserMessageFavourite>()
.Where(f => f.Message.Id == messageAlias.Id).ToRowCountQuery()).WithAlias(() => messageDto.FavouriteCount)
)
)
プロパティMessageDto,FavouriteCount
は単にそこにあります。だから私がやりたいものを既にお使いのMessageDTO
エンティティにFavouriteCount
を持っているなら、あなたはこのような読み取り専用C#のプロパティを使用することができる条件でサブクエリの結果を使用して.SelectSubQuery(subquery.ToRowCountQuery()) > 0).WithAlias(() => messageDto.IsFavourite)
こんにちはローマを、私の目標は、 'FavouriteCount'プロパティを削除することでした。 私はあなたの 'Projections'の例を使ってこれを解決しました。ありがとう! – Bunnynut