0

以下を達成する方法はありますか?

// colourInfo.Discount = 75, but can change
// allPrice type has Part, Desc, Type

var a = allPricesForPgs.Where(x => x.PG == c && x.ColourCode == colourInfo.ColourCode).Select(y=> new AllPrice {Part=y.Part, Desc=y.Desc, Price=y.Price*(colourInfo.Discount/100)}));

エラーが表示されます:エンティティまたは複合型 'Portal.AllPrice' は、LINQ to Entities クエリで構築できません。

EF は計算を処理できないようですが、あるテーブルから動的な値を取得して別のテーブルで計算を行う場合、どのようなオプションがありますか?

4

1 に答える 1

1

Sam1のコメントは正しいです。別のエンティティに射影することはできません。あなたが持っている他のオプションは、次のような匿名型を作成することです:

var a = allPricesForPgs
        .Where(x => x.PG == c && x.ColourCode == colourInfo.ColourCode)
        .Select(y=> new 
            {
                Part=y.Part, 
                Desc=y.Desc, 
                Price=y.Price*(colourInfo.Discount/100)
             }
         ));

または、一時データ (DTO など) を保持するクラスを作成します。

他のエンティティを変更するには、この情報を取得するだけでよいように思われるため、匿名型で実行できるはずです。

編集:

.Select(...) の直前に「.ToList()」を追加できます。基本的に、LINQ TO ENTITIES の代わりに LINQ TO OBJECTS を使用することになるため、多くのエンティティが allPricesForPgs.Where(...) ステートメントに一致する可能性がある場合は、それを避ける必要があります。

しかし、これらを AllPrice のものにしたいのであれば、AllPrice DB に追加しないのはなぜですか? Entity Framework の一部の AllPrice とこのリストの一部の AllPrice の個別のリストを保持していますか? これは混乱を招き、エラーを引き起こす可能性があります。

最後のオプションは、クラスを拡張することです。すべてのエンティティは PARTIAL と宣言されています。次のような別のクラスを作成できます。

partial class AllPrice
{
    Double DiscoutedPrice { get { Price * myDiscount/100; } }
于 2012-10-18T16:15:13.983 に答える