ホームページ > バックエンド開発 > C++ > NHibernate QueryOver を使用して、最新の成功した応答を含むリクエストを取得する方法

NHibernate QueryOver を使用して、最新の成功した応答を含むリクエストを取得する方法

DDD
リリース: 2025-01-15 09:13:47
オリジナル
460 人が閲覧しました

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

NHibernate QueryOver を使用した最新の成功した応答を持つリクエストの取得

この例では、すべての Request エンティティ (それぞれが最後に成功した Response に関連付けられている) を取得する高度な NHibernate QueryOver クエリを示します。 Request エンティティには、Response エンティティのコレクションがあります。 RequestResponse に基づいて、Response とその最新の成功した Timestamp のみをフェッチすることを目指しています。

以下のソリューションでは、ネストされたサブクエリを利用して、この複雑な取得を実現しています。 Response エンティティに「IsActive」フラグが含まれている場合は、より単純なアプローチが可能になる可能性があります。

これが 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>
ログイン後にコピー

このコードはサブクエリを使用して、関連する Response エンティティを効率的に識別し、それらを対応する Request エンティティにリンクします。 maxTimestampSubquery は各リクエストの最新のタイムスタンプを検索し、successfulResponseSubquery はそれらのタイムスタンプに一致する成功した応答をフィルターします。次に、メイン クエリは、成功した応答のサブクエリで見つかった ID に基づいて Request エンティティを取得します。 RequestResponse を実際のエンティティ名に置き換え、それに応じてプロパティ名を調整してください。

以上がNHibernate QueryOver を使用して、最新の成功した応答を含むリクエストを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート