Heim >Backend-Entwicklung >C++ >Wie rufe ich mit NHibernate Anfragen mit der neuesten erfolgreichen Antwort ab?

Wie rufe ich mit NHibernate Anfragen mit der neuesten erfolgreichen Antwort ab?

Susan Sarandon
Susan SarandonOriginal
2025-01-15 06:35:43742Durchsuche

How to Retrieve Requests with the Latest Successful Response Using NHibernate?

HasMany-Abfrage: Holen Sie sich die Anfrage mit der letzten erfolgreichen Antwort

Betrachten Sie das folgende Volumenmodell:

<code class="language-c#">public class Request
{
    public virtual IList<Response> Responses { get; set; }
}

public class Response
{
    public virtual DateTime Timestamp { get; set; }
    public virtual bool Success { get; set; }
}</code>

Die Aufgabe besteht darin, eine Abfrage zu erstellen, die alle erfolgreichen Anfragen mit der neuesten Antwort (basierend auf dem Zeitstempel) abruft.

NHibernate-Lösung mit QueryOver

NHibernate bietet eine umfassende Lösung mit QueryOver:

<code class="language-c#">Response responseAlias = null;

var maxSubquery = QueryOver.Of<Response>()
    .SelectList(l => l
        .SelectGroup(item => item.RequestId)
        .SelectMax(item => item.Timestamp) // 使用 Timestamp 而不是 DateTime
    )
    .Where(item => item.RequestId == responseAlias.RequestId)
    .Where(Restrictions.EqProperty(
        Projections.Max<Response>(item => item.Timestamp), // 使用 Timestamp 而不是 DateTime
        Projections.Property(() => responseAlias.Timestamp) // 使用 Timestamp 而不是 DateTime
    ));

var successSubquery = QueryOver.Of<Response>(() => responseAlias)
    .Select(res => res.RequestId)
    .WithSubquery
    .WhereExists(maxSubquery)
    .Where(success => success.Success == true);

var query = session.QueryOver<Request>();
query.WithSubquery
    .WhereProperty(r => r.ID)
    .In(successSubquery);

var list = query.List<Request>();</code>

Diese Abfrage ruft alle Anfragen ab, die mindestens eine erfolgreiche Antwort hatten (die aktuellste basierend auf dem Zeitstempel). DateTime wurde im Code durch das genauere Timestamp ersetzt und die Variablenbenennung wurde leicht angepasst, um die Lesbarkeit zu verbessern. Die Kernlogik bleibt dieselbe.

Das obige ist der detaillierte Inhalt vonWie rufe ich mit NHibernate Anfragen mit der neuesten erfolgreichen Antwort ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn