2

CustomerGroups と Product に関連するテーブル、Discounts があります。

キー:

  • Product にはキー int ProductID があります。
  • 割引にはキー int DiscountID があります。
  • CustomerGroup にはキー int CustomerGroupID があります。

関係:

  • Discounts と CustomerGroups の間の関係は 1 対多で、null 可能です (Discount には null 可能な CustomerGroup があります)。
  • 割引と製品の関係は多対多で、接続テーブルの割引_製品を経由します。そのテーブルには、DiscountID と ProductID の 2 つの int で構成される複合キーがあります。その接続テーブルは、モデル ダイアグラムでは自動的に非表示になり、両端が * である関係が得られます。

EF を使用して入力する変数 Discounts1 があります。

IQueryable<Models.Discount> Discounts1 = _entities.Discounts;

私が望むのは、顧客グループに関連付けられておらず、特定の製品に関連する割引のすべての割引率を求めることです。

私が使用しようとしているlinq式は次のとおりです。

var candidates = (from discount in Discounts1
  where (discount.CustomerGroup == null)
  && discount.Products.Contains(product)
  select discount.Percentage).ToList();

このコードを実行すると得られるのは、メッセージ付きの NotSupportedException です

タイプ 'Models.Product' の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。

私は何を間違っていますか?

4

3 に答える 3

2

Contains(product)Entity Framework はを SQL コードに変換できません。あなたの問題はここにあります:

discount.Products.Contains(product)

ProductID製品は、プリミティブ タイプである で検索する必要があります。

これは、サポートされていない非スカラー変数の参照に記載されている既知の問題です。

クエリでのエンティティなどの非スカラー変数の参照はサポートされていません。このようなクエリが実行されると、NotSupportedException 例外がスローされ、「EntityType 型の定数値を作成できません。このコンテキストでは、プリミティブ型 ('Int32、String、および Guid' など) のみがサポートされています。」というメッセージが表示されます。

于 2013-08-08T07:03:34.793 に答える