首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板