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