Heim >Backend-Entwicklung >C++ >Wie kann ich mit NHibernate nur Anfragen mit der letzten erfolgreichen Antwort abrufen?

Wie kann ich mit NHibernate nur Anfragen mit der letzten erfolgreichen Antwort abrufen?

Susan Sarandon
Susan SarandonOriginal
2025-01-15 10:20:44583Durchsuche

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

Abfragen einer HasMany-Referenz mit NHibernate: Rufen Sie die Anfrage mit der letzten erfolgreichen Antwort ab

Dieser Artikel führt Sie durch die Erstellung einer Abfrage, die alle Anfragen abruft, deren letzte Antwort (basierend auf dem Zeitstempelattribut) erfolgreich war.

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>

Abfrageerstellung:

Um die gewünschten Ergebnisse zu erhalten, können wir eine NHibernate QueryOver-Abfrage erstellen, die eine Unterabfrage verwendet:

<code class="language-c#">// 响应子查询,查找最大日期响应
var maxSubquery = QueryOver.Of<Response>()
    .SelectList(l => l
        .SelectGroup(item => item.RequestId)
        .SelectMax(item => item.Timestamp))
    .Where(item => item.RequestId == response.RequestId)
    .Where(Restrictions.EqProperty(
        Projections.Max<Response>(item => item.Timestamp),
        Projections.Property(() => response.Timestamp)));

// 响应子查询,查找具有最大日期的成功响应
var successSubquery = QueryOver.Of<Response>()(() => response)
    .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>

Abfrageanweisungen:

  • maxSubquery Finden Sie das maximale Antwortdatum für jede Anfrage.
  • successSubquery Filtert Antworten, um nur diejenigen einzuschließen, die erfolgreich sind und für deren jeweilige Anfragen ein maximales Datum gilt.
  • Die Hauptabfrage filtert dann Anfragen basierend auf der Verfügbarkeit erfolgreicher Antworten, die in successSubquery identifiziert wurden.

Erwägen Sie alternativ das Festlegen einer „IsActive“-Eigenschaft für die Antwort, um die Abfrage zu vereinfachen.

Das obige ist der detaillierte Inhalt vonWie kann ich mit NHibernate nur Anfragen mit der letzten erfolgreichen Antwort abrufen?. 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