为什么我不能在LINQ中的where子句中使用dictionary ["key"]?

Eri*_*ric 1 c# linq where-clause entity-framework-5

我正在运行一个简单的LINQ查询:

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

当我运行它时,我得到这个例外:

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();
Run Code Online (Sandbox Code Playgroud)

看起来有点奇怪.Net无法想得更快一点.

(免责声明:可能是一些拼写错误,我更改了一些变量名称)

Max*_*kiy 6

Linq尝试将您的where子句转换为SQL并失败,因为SQL没有字典.一旦给解析器一个简单的字符串,它就能生成一个SQL语句.

你可以让它在本地执行过滤器,而不是在SQL服务器上,但它会达到性能:

var user= (from u in context.Users select u)
    .AsEnumerable()
    .Where(u=>u.Email == dictionary["email"])
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • 我准备给你投票,直到我看到第二部分,你在获取所有记录后提供了运行过滤器的选项,我什至不想向不完全理解其含义的人提及这个选项。 (3认同)