Maison >développement back-end >C++ >Comment récupérer des requêtes avec uniquement la dernière réponse réussie à l'aide de NHibernate ?

Comment récupérer des requêtes avec uniquement la dernière réponse réussie à l'aide de NHibernate ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-15 10:20:44632parcourir

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

Interroger une référence HasMany à l'aide de NHibernate : récupérer la requête avec la dernière réponse réussie

Cet article vous guidera dans la création d'une requête qui récupère toutes les requêtes dont la dernière réponse (basée sur l'attribut timestamp) a réussi.

Considérons le modèle solide suivant :

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

Création de requêtes :

Pour obtenir les résultats souhaités, nous pouvons créer une requête NHibernate QueryOver qui utilise une sous-requête :

<code class="language-c#">// 响应子查询,查找最大日期响应
var maxSubquery = QueryOver.Of<Response>()
    .SelectList(l => l
        .SelectGroup(item => item.RequestId)
        .SelectMax(item => item.Timestamp))
    .Where(item => item.RequestId == response.RequestId)
    .Where(Restrictions.EqProperty(
        Projections.Max<Response>(item => item.Timestamp),
        Projections.Property(() => response.Timestamp)));

// 响应子查询,查找具有最大日期的成功响应
var successSubquery = QueryOver.Of<Response>()(() => response)
    .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>

Instructions de requête :

  • maxSubquery Retrouvez la date maximale de réponse pour chaque demande.
  • successSubquery Filtre les réponses pour inclure uniquement celles qui aboutissent et ont une date maximale pour leurs demandes respectives.
  • La requête principale filtre ensuite les demandes en fonction de la disponibilité des réponses réussies identifiées dans successSubquery.

Vous pouvez également envisager de définir une propriété « IsActive » sur la réponse pour simplifier les requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn