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
Freigeben: 2025-01-15 06:35:43
Original
740 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage