使用 NHibernate QueryOver 來擷取具有最近成功回應的請求
此範例示範了一個複雜的 NHibernate QueryOver 查詢,用於檢索所有 Request
實體,每個實體都與其最新成功的 Response
相關聯。 Request
實體具有 Response
實體的集合。 我們的目標是只取得 Request
及其最近成功的 Response
,基於 Response
的 Timestamp
。
下面的解決方案利用巢狀子查詢來實現這種複雜的檢索。 如果 Response
實體包含「IsActive」標誌,則可能有更簡單的方法。
這是 NHibernate QueryOver 實作:
<code class="language-c#">// Reference to a Response entity Response responseAlias = null; // Subquery to find the maximum DateTime for each RequestId var maxTimestampSubquery = QueryOver.Of<Response>(() => responseAlias) .SelectList(l => l .SelectGroup(() => responseAlias.RequestId) .SelectMax(() => responseAlias.DateTime) ); // Subquery to find successful Responses with the maximum DateTime var successfulResponseSubquery = QueryOver.Of<Response>(() => responseAlias) .Where(() => responseAlias.Success == true) .WithSubquery .WhereProperty(() => responseAlias.DateTime).In(maxTimestampSubquery); // Main query to retrieve Requests with successful Responses var query = session.QueryOver<Request>(); query.WithSubquery .WhereProperty(r => r.Id) .In(successfulResponseSubquery.Select(r => r.RequestId)); var requests = query.List<Request>();</code>
此程式碼使用子查詢來有效地識別相關的 Response
實體並將它們連結到對應的 Request
實體。 maxTimestampSubquery
尋找每個請求的最新時間戳,successfulResponseSubquery
過濾器符合這些時間戳記的成功回應。然後,主查詢根據成功回應子查詢中找到的 ID 檢索 Request
實體。請記得將 Request
和 Response
替換為您的實際實體名稱,並相應地調整屬性名稱。
以上是如何使用 NHibernate QueryOver 檢索請求及其最新成功回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!