使用 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中文网其他相关文章!