3

Linq を使用してクエリを実行しようとしていますが、これは初めてのことです。ID の配列を受け取り、これらの ID を持つ製品を取得したいと考えています。私が得たlinqクエリはこれでした:

    public Product[] RetrieveProduct(int[] ids)
    {
        var query = from productInfos in productRepository.Table
                    where (ids.Contains(productInfos.Id))
                    && productInfos.Active
                    select new ProductIndiInfo
                    {
                        ProductId = productInfos.Id,
                        CurrentPrice = productInfos.CurrentPrice
                    };
        return query.ToArray();
    }

しかし、私は有名な例外を受け取り続けています:

{"型 'System.Int32[]' の定数値を作成できません。このコンテキストでは、プリミティブ型 ('Int32、String、および Guid' など') のみがサポートされています。"}

私が読んだいくつかのリソースでは、それは利用できないと言っています。しかし、他の人はそれがうまくいくはずだと私に言います。ここやブログなどで代替案を含む多くの投稿を見てきましたが、機能しません。これは構文の問題だと思い始めています...

私もこのアプローチを試しました:

 var query = from productInfos in pricingInfoRepository.Table
                    where ids.Any(id => id == productInfos.ProductId)
                    && productInfos.Active
                    select new PricingInfo
                    {
                        ProductId = productInfos.Id,
                        CurrentPrice = productInfos.CurrentPrice
                    };
        return query.ToArray();

しかし、私は同じ問題を抱えています。

私の構文が間違っているのか、それとも本当にLinqの問題なのか、誰か教えてください。(動作未対応?)

使用している EF のバージョンを確認するにはどうすればよいですか?

更新:私が理解している限り、ids.Contains() に関するこの質問は L2S の質問ですが、考えられる答えは、EF2 がサポートしていないということです。私はそれを正しく理解していますか?

4

2 に答える 2

3

Entity Framework はContains、EF 4.0 で配列に対するサポートを開始しただけです。OR 条件のリストを含めるように を構築することにより、古いバージョンでこれを回避できます。Expression

ps: 使用している EF のバージョンを確認するにはどうすればよいですか?

System.Data.Entityアセンブリのバージョンを確認してください。詳細については、この他の質問を参照してください。

于 2012-08-21T00:22:15.060 に答える