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中文網其他相關文章!