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

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

DDD
DDDoriginal
2025-01-15 09:13:47458parcourir

How to Retrieve Requests with Their Latest Successful Response Using NHibernate QueryOver?

Récupération des requêtes avec la réponse réussie la plus récente à l'aide de NHibernate QueryOver

Cet exemple illustre une requête NHibernate QueryOver sophistiquée pour récupérer toutes les entités Request, chacune associée à son dernier Response réussi. L'entité Request possède une collection d'entités Response. Notre objectif est de récupérer uniquement le Request ainsi que son Response à succès le plus récent, sur la base du Response du Timestamp.

La solution ci-dessous utilise des sous-requêtes imbriquées pour réaliser cette récupération complexe. Une approche plus simple pourrait être possible si l'entité Response incluait un indicateur "IsActive".

Voici l'implémentation de 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>

Ce code utilise des sous-requêtes pour identifier efficacement les Response entités pertinentes et les lier à leurs Request entités correspondantes. Le maxTimestampSubquery recherche le dernier horodatage pour chaque demande et le successfulResponseSubquery filtre les réponses réussies correspondant à ces horodatages. La requête principale récupère ensuite les entités Request en fonction des identifiants trouvés dans la sous-requête de réponse réussie. N'oubliez pas de remplacer Request et Response par vos noms d'entité réels et d'ajuster les noms de propriétés en conséquence.

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