Entity Frameworkクエリに配列を含めることはできません。たとえば、これは失敗します。なぜEntity Frameworkクエリで配列を使用できないのですか?
var myRow = DbContext.myTable.Single(d => d.Property1 == myArray[0].Property1);
しかし、私は最初にこのように変数にその要素を割り当てた場合:
var property1 = myArray[0].Property1;
var myRow = DbContext.myTable.Single(d => d.Property1 == property1);
を次にそれが動作します。なぜコンパイラーは私たちのためにこれをしませんか?これはすでに最適化を行い、他の多くの状況で構文的砂糖によるショートカットを提供しています。コンパイラが配列要素をバックグラウンドで一時変数にコピーするのを妨げる曖昧さの原因はありますか?それとも別の理由?
これはC#コンパイラの制限ではなく、Linq to Entitiesプロバイダの制限です。 –
コードの2番目の部分では、式の一部となる定数値を使用しているためです。最初のコード部分のlinqを式に変換することはできません。 –
LINQ-to-EF/LINQ-to-SQLプロバイダによってSQLに変換されないほとんどの特定のメソッド/プロパティについて、多くの類似した(正確には重複しない)議論があります。私。 http://stackoverflow.com/questions/3360772/linq-contains-case-insensitiveには他のディスカッションへのリンクがあります。 –