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

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

Susan Sarandon
發布: 2025-01-15 06:35:43
原創
740 人瀏覽過

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

HasMany 查詢:取得具有最新成功回應的請求

考慮以下實體模型:

<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>
登入後複製

任務是建立一個查詢,檢索所有最新回應(基於時間戳記)成功的請求。

使用 QueryOver 的 NHibernate 解

NHibernate 提供了一個使用 QueryOver 的全面解決方案:

<code class="language-c#">Response responseAlias = null;

var maxSubquery = QueryOver.Of<Response>()
    .SelectList(l => l
        .SelectGroup(item => item.RequestId)
        .SelectMax(item => item.Timestamp) // 使用 Timestamp 而不是 DateTime
    )
    .Where(item => item.RequestId == responseAlias.RequestId)
    .Where(Restrictions.EqProperty(
        Projections.Max<Response>(item => item.Timestamp), // 使用 Timestamp 而不是 DateTime
        Projections.Property(() => responseAlias.Timestamp) // 使用 Timestamp 而不是 DateTime
    ));

var successSubquery = QueryOver.Of<Response>(() => responseAlias)
    .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>
登入後複製

此查詢會擷取所有至少有一個成功的回應(基於時間戳為最新)的請求。 程式碼中將DateTime替換為更準確的Timestamp,並對變數命名進行了細微調整,以提高可讀性。 核心邏輯保持不變。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板