Ich verwende NHibernate mit IQueryOver, um eine List<Message>
abzurufen. Benutzer können eine Message
als Favorit markieren. Jede Message
hat eine Eigenschaft public bool IsFavourite
, die true
enthält, wenn mindestens eine User
diese Message
als ihren Favoriten markiert hat. Also in meiner Abfrage verwende ich SelectSubQuery
, um die Anzahl zu erhalten, wie oft es als Favorit markiert wurde. So weit, ist es gut. Ich möchte auch das Ergebnis von dieser Unterabfrage in einer Bedingung verwenden, um IsFavourite
festzulegen.Verwenden Sie das Ergebnis von SelectSubQuery in einer Bedingung mit NHibernate QueryOver
Meine Abfrage sieht jetzt so aus.
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)
)
)
Die Eigenschaft MessageDto,FavouriteCount
ist nur da, damit ich die IsFavourite
Eigenschaft einstellen. Also, was würde ich tun möchte, ist das SubQuery Ergebnis in einem Zustand verwenden, und das Ergebnis dieser Bedingung IsFavourite
wie .SelectSubQuery(subquery.ToRowCountQuery()) > 0).WithAlias(() => messageDto.IsFavourite)
Hallo Roman, mein Ziel war es, die 'FavouriteCount' Eigenschaft zu entfernen:
Ansonsten können Sie benutzerdefinierte Projektion verwenden. Ich löste das mit Ihrem 'Projections' Beispiel. Vielen Dank! – Bunnynut