ホームページ > バックエンド開発 > C++ > インメモリ コレクションに参加する LINQ クエリの「定数値を作成できません」エラーを解決する方法

インメモリ コレクションに参加する LINQ クエリの「定数値を作成できません」エラーを解決する方法

DDD
リリース: 2025-01-17 23:34:09
オリジナル
944 人が閲覧しました

How to Resolve

メモリ内データを使用した LINQ クエリの「定数作成エラー」の解決

課題:

LINQ クエリが失敗し、「API.Models.PersonProtocol 型の定数値を作成できません。このコンテキストではプリミティブ型または列挙型のみがサポートされています。」というエラーが生成されました。これは、データベース レコードとメモリ内コレクション (ppCombined という名前) 間の結合操作中に発生しました。

エラーの理解:

このエラーは、LINQ to Entities (または同様の ORM) がメモリ内コレクションに関係する結合を SQL に直接変換できないために発生します。 データベース内で結合を効率的に実行するには、両方のデータセットがデータベースに常駐する必要があります。

解決策: 2 段階のアプローチ

この解決策には、データベース クエリをメモリ内処理から分離することが含まれます。 まず、データベースから必要なデータを取得し、次に別のメモリ内操作でメモリ内コレクションとの結合を実行します。

<code class="language-csharp">var persons = db.Favorites
    .Where(f => f.userId == userId)
    .Join(db.Person, f => f.personId, p => p.personId, (f, p) =>
        new // anonymous object
        {
            personId = p.personId,
            addressId = p.addressId,   
            favoriteId = f.favoriteId,
        })
    .AsEnumerable() // Crucial: This line switches to in-memory processing
    .Select(x =>
        new PersonDTO
        {
            personId = x.personId,
            addressId = x.addressId,   
            favoriteId = x.favoriteId,
            personProtocol = ppCombined
                .Where(p => p.personId == x.personId)
                .Select(p => new PersonProtocol
                {
                    personProtocolId = p.personProtocolId,
                    activateDt = p.activateDt,
                    personId = p.personId
                })
                .ToList()
        });</code>
ログイン後にコピー

AsEnumerable() メソッドが重要です。データベース クエリを強制的に実行し、メモリ内のコレクションを返します。 後続の Select ステートメントは、このメモリ内データを処理し、アプリケーションのメモリ内で効率的に ppCombined と結合します。 これにより、データベース コンテキスト内で直接結合を実行しようとする際の制限が回避されます。

以上がインメモリ コレクションに参加する LINQ クエリの「定数値を作成できません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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