プロジェクトはちょうどlinq-to-sqlからlinq-to-entitiesに切り替わりました、そして今私はエラーを得ます
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
この行の場合:
var a = db.Table.Single(d => d.Date == dates[0]);
(この特定のケースでは、修正するのは簡単です。
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
しかし、なぜこれがlinq-to-sqlではなく、linq-to-entitiesでは機能しないのでしょうか。それらはlinq-to-sqlよりもlinq-to-entitiesを悪化させましたか?何が足りないの?
これは、L2EがクエリをSQLコマンドに変換しようとしているだけだからです。そのため、追加のもの(.ToString()などのメソッド、およびSQLに変換できないその他のもの)があると、この例外が発生します。
ただし、オブジェクトに対するlinqのようなL2SはIEnumerableを実装しています。そのため、それらの目的は異なります。linqクエリをsqlコマンドに変換するL2E、メモリ内のIEnumerableオブジェクトを処理するL2O、データベースをモデル化して処理するL2Sです。
さて、あなたのEFプロジェクトでL2Sクエリを(L2Eを使って)使えるようにしたいのなら、まずあなたから取得したデータをDbContextからIEnumerableに変換する必要があります。
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...