1

簡単な LINQ クエリを実行しています。

var user = (from u in context.Users
          where u.Email == dictionary["email"]
          select u).FirstOrDefault();

それを実行すると、次の例外が発生します。

LINQ to Entities はメソッド 'System.String get_Item(System.String)' メソッドを認識せず、このメソッドはストア式に変換できません。

これの中間ステップを使用すると、正常に動作します。

String myDictionaryItem = dictionary["email"];

var user = (from u in context.Users
          where u.Email == myDictionaryItem
          select u).FirstOrDefault();

.Net がその接続を確立するために少し速く考えることができないのは、ちょっと奇妙に思えます。

(免責事項: いくつかのタイプミスがあるかもしれません。いくつかの変数名を変更しました)

4

1 に答える 1

7

Linq は where 句を SQL に変換しようとしますが、SQL には辞書がないため失敗します。パーサーに単純な文字列を与えると、SQL ステートメントを生成できます。

SQL サーバーではなく、ローカルでフィルターを実行するようにすることもできますが、パフォーマンスが低下します

var user= (from u in context.Users select u)
    .AsEnumerable()
    .Where(u=>u.Email == dictionary["email"])
    .FirstOrDefault();
于 2013-09-15T23:06:03.877 に答える