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

时间:2013-09-15 22:51:50

标签: c# linq entity-framework-5 where-clause

我正在运行一个简单的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无法想得更快一点。

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

1 个答案:

答案 0 :(得分:6)

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

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

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