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
Libérer: 2025-01-15 10:20:44
original
628 Les gens l'ont consulté

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 :

1

2

3

4

5

6

7

8

9

10

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

Copier après la connexion

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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

Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal