首頁 >後端開發 >C++ >如何使用 NHibernate 的 QueryOver 來檢索具有最新成功回應的請求?

如何使用 NHibernate 的 QueryOver 來檢索具有最新成功回應的請求?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-15 07:07:45316瀏覽

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

使用 NHibernate 的 QueryOver 來擷取具有最近成功回應的請求

在涉及 RequestResponse 實體之間一對多關係 (HasMany) 的場景中,高效獲取與其最新成功的 Request 關聯的所有 Response 物件是一項常見任務。 這可以使用 NHibernate 的 QueryOver API 優雅地完成。

讓我們檢查一個簡化的模型:

<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>

以下步驟示範如何建構 QueryOver 查詢:

<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>

此方法利用子查詢根據具有最新時間戳記的成功 Request 的存在來有效過濾 Response 實體,鏡像資料庫本身內複雜 SQL 查詢的功能。

以上是如何使用 NHibernate 的 QueryOver 來檢索具有最新成功回應的請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn