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 回答