我正在运行一个简单的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无法想得更快一点。
(免责声明:可能是一些拼写错误,我更改了一些变量名称)
答案 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();