Heim >Backend-Entwicklung >C++ >Wie kann ich mit NHibernate nur Anfragen mit der letzten erfolgreichen Antwort abrufen?
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. 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!