2

「Where」でエンティティフレームワークを使用して奇妙なシナリオに遭遇しました。このシナリオでは、文字列を検索できますが、文字列は配列の一部ではありません。

これは機能します:

string line = sr.ReadLine();
string[] row = line.Split(';');
string code = row[0];
TableObject to = db.TableObject.Where(e => e.property == code).FirstOrDefault();

ただし、ステップ文字列を省略しcode = row[0]て次のようにしてコードを単純化しようとすると、次のようになります。

string line = sr.ReadLine();
string[] row = line.Split(';');
TableObject to = db.TableObject.Where(e => e.property == (string) row[0]).FirstOrDefault();

次の例外が発生します。

System.NotSupportedException: The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.

row[0]私は特に配列を。としてキャストしているので、例外が配列の表示について不平を言っているのは大変なこと(string)です。

.ToString()どちらも問題を解決しません。

これは大したことではないことは知っていますが、なぜそうなのか興味があります。

4

1 に答える 1

2

Entity Framework は、完全な式e => e.property == (string) row[0]を SQLWHEREステートメントに変換しようとします。どの SQL 式に変換するかがわかりません(string) row[0]

すべての LINQ プロバイダーは、一連の特定の命令のみを処理できます。EF LINQ プロバイダーは、配列のインデックスの評価をサポートしていません。プリミティブのみを使用できます。そのため、ラムダの外側の配列から文字列を抽出する必要があります。

于 2012-12-18T14:21:45.810 に答える