ホームページ > バックエンド開発 > C++ > NHibernate を使用して、成功した最新の応答を含むリクエストを効率的に取得するにはどうすればよいですか?

NHibernate を使用して、成功した最新の応答を含むリクエストを効率的に取得するにはどうすればよいですか?

DDD
リリース: 2025-01-15 07:53:14
オリジナル
901 人が閲覧しました

How to Efficiently Retrieve Requests with Successful Latest Responses Using NHibernate?

NHibernate クエリの最適化: 成功した最新の応答を含むリクエストの取得

この記事では、最新の Request が成功を示す Response エンティティを取得する効率的な NHibernate クエリを示します。 私たちのデータ モデルには、Request エンティティのコレクションを持つ Response エンティティが含まれています。各 Response には Timestamp とブール値の Success プロパティがあります。

このソリューションでは、NHibernate の QueryOver API を使用したマルチレベルのサブクエリ アプローチを採用し、可読性と保守性を向上させています。

内部サブクエリ (maxSubquery) は、グループ化と集計を使用して各 Request の最大タイムスタンプを識別します。 2 番目のサブクエリ (successSubquery) は、これらの最大タイムスタンプをフィルター処理して、対応する RequestResponse を true としてマークした Success ID のみを選択します。

最後に、外側のクエリは

エンティティを取得し、Request で識別された ID に基づいて結果をフィルター処理します。 これにより、正常に完了した最新の応答を持つリクエストのみが返されるようになります。successSubquery

この最適化されたクエリを実装する C# コードは次のとおりです。

<code class="language-csharp">Response responseAlias = null;
var maxSubquery = QueryOver.Of<Response>()
    .SelectList(l => l
        .SelectGroup(r => r.RequestId)
        .SelectMax(r => r.Timestamp)) //Using Timestamp instead of DateTime for clarity
    .Where(r => r.RequestId == responseAlias.RequestId)
    .Where(Restrictions.EqProperty(
        Projections.Max<Response>(r => r.Timestamp),
        Projections.Property(() => responseAlias.Timestamp)));

var successSubquery = QueryOver.Of<Response>(() => responseAlias)
    .Select(r => r.RequestId)
    .WithSubquery
    .WhereExists(maxSubquery)
    .Where(r => r.Success); //Simplified Success check

var query = session.QueryOver<Request>();
query.WithSubquery
    .WhereProperty(r => r.Id) // Assuming Id is the primary key
    .In(successSubquery);

var requestsWithSuccessfulLatestResponses = query
    .List<Request>();</code>
ログイン後にコピー
このアプローチは、必要なデータを効率的に取得し、複雑なデータ関係とクエリの最適化を処理する NHibernate の能力を示しています。 エイリアスを使用すると可読性が向上し、コードが合理化されて明確になります。 一貫性を保つために、

の代わりに Timestamp を使用することに注意してください。DateTime

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

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