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 ?
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. 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!