1

私は以下のコードを持っています(これは実際にははるかに複雑なクエリの一部ですが、デバッグを支援するためにこの特定の行に問題を分離しました)これは、私が使用していると仮定して、SQLでIN句を作成する必要があります。 EF4。私が知る限り、私は EF4 を使用しています (プロジェクトに .NET Framework 4 を使用しています。System.Data と System.Data.Entity を見ると、両方ともすべてのプロジェクトでバージョン 4.0.0.0 と表示されています)。

int[] assessmentIDs; // this is just here to show what this is, 
                     // but it is a params parameter passed to this methed                  

var assessments = from cert in container.ProctorAssessmentCertifications
                  where assessmentIDs.Contains(cert.AssessmentID)
                  select cert.ID;

ただし、これを実行すると、ランタイム エラーが発生します。

LINQ to Entities does not recognize the method 'Boolean Contains[Int32](Int32[], Int32)' method, and this method cannot be translated into a store expression.

LinqPad を使用すると、EF4 で期待されるような IN 句が正しく出力されます。私の質問は次のとおりです。

A. 間違っている点と、これを機能させるにはどうすればよいですか?

B. 実際には EF4 が呼び出されていない場合、EF4 を強制的に呼び出すにはどうすればよいですか? 古いバージョンを指す web.config ファイルには参照が見つかりません。

4

1 に答える 1

1

評価 ID は IQueryable ではなく、インメモリ オブジェクトであるため、Contains は有効な SQL に変換されません。したがって、最初にデータを引き出してから、チェックを行う必要があります。

var assessments = (from cert in container.ProctorAssessmentCertifications                  
                  select cert.ID).ToList() //no longer IQueryable.

var result = assessments.Intersect(assessmentIDs);
于 2012-07-31T16:40:21.820 に答える