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

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

Mary-Kate Olsen
Freigeben: 2025-01-15 07:07:45
Original
319 Leute haben es durchsucht

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

Abrufen von Anfragen mit der aktuellsten erfolgreichen Antwort mit QueryOver von NHibernate

In Szenarien mit einer Eins-zu-viele-Beziehung (HasMany) zwischen Request und Response-Entitäten ist das effiziente Abrufen aller Request-Objekte, die mit ihrem letzten erfolgreichen Response verknüpft sind, eine häufige Aufgabe. Dies kann elegant mit der QueryOver-API von NHibernate erreicht werden.

Lassen Sie uns ein vereinfachtes Modell untersuchen:

<code class="language-csharp">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; }
    public virtual Request Request { get; set; } // Added for clarity
}</code>
Nach dem Login kopieren

Die folgenden Schritte veranschaulichen, wie die QueryOver-Abfrage erstellt wird:

<code class="language-csharp">// Subquery to identify the maximum timestamp for successful responses per Request
Response responseAlias = null;
IQueryOver<Response> subquery = QueryOver.Of<Response>(() => responseAlias)
    .Where(r => r.Request.Id == responseAlias.Request.Id) // Join condition
    .Select(Projections.Max<Response>(r => r.Timestamp));

// Subquery to filter for successful responses with the maximum timestamp
IQueryOver<Response> successSubquery = QueryOver.Of<Response>(() => responseAlias)
    .WithSubquery.WhereProperty(r => r.Timestamp).Eq(subquery)
    .Where(r => r.Success == true);


// Main query to retrieve Requests
Request requestAlias = null;
IQueryOver<Request> query = session.QueryOver<Request>(() => requestAlias);
query.WithSubquery.WhereExists(() => successSubquery);

// Execute the query
IList<Request> requests = query.List();</code>
Nach dem Login kopieren

Dieser Ansatz nutzt Unterabfragen, um die Request-Entitäten effizient zu filtern, basierend auf dem Vorhandensein einer erfolgreichen Response mit dem neuesten Zeitstempel, und spiegelt so die Funktionalität einer komplexen SQL-Abfrage in der Datenbank selbst wider.

Das obige ist der detaillierte Inhalt vonWie rufe ich Anfragen mit der neuesten erfolgreichen Antwort mithilfe von QueryOver von NHibernate 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