ホームページ > バックエンド開発 > C++ > SELECT 句で非プリミティブ型を使用して結合すると LINQ クエリが失敗するのはなぜですか?

SELECT 句で非プリミティブ型を使用して結合すると LINQ クエリが失敗するのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-17 23:26:09
オリジナル
262 人が閲覧しました

Why Does My LINQ Query Fail When Joining with a Non-Primitive Type in the SELECT Clause?

非基本型または列挙型の定数値は作成できません

問題の説明

クエリ中の例外: 「API.Models.PersonProtocol 型の定数値を作成できません。このコンテキストではプリミティブ型または列挙型のみがサポートされています。」

根本原因

クエリは、別の JOIN の SELECT 句内で LINQ JOIN を使用しようとしました。ただし、ppCombined (PersonProtocolType の IEnumerable オブジェクト) を定数値型として使用できないため、このアプローチは失敗します。

具体的な問題は、ppCombined コレクションがメモリ内のデータを表す一方で、クエリがデータベース内のデータに対して実行されることです。 2 つのデータ セットを結合することはできません。

解決策

この問題を解決するには、中間結果を使用してデータベースから他のプロパティを取得した後、メモリ内の ppCombined からフィルタリングされた項目を抽出します。

変更されたクエリ

元のクエリを置き換えるには、次の変更されたメソッドを使用できます:

<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 // 匿名对象
        {
            personId = p.personId,
            addressId = p.addressId,   
            favoriteId = f.favoriteId,
        })
    .AsEnumerable() // 数据库查询在此处结束,其余部分是内存中的查询
    .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>
ログイン後にコピー

メソッドは、メモリ内クエリを続行する前にデータベース クエリが確実に完了するようにします。これにより、データベース データを取得した後、ppCombined コレクションをフィルター処理してメモリに投影できるようになります。 AsEnumerable()

以上がSELECT 句で非プリミティブ型を使用して結合すると LINQ クエリが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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