6

一个项目刚刚从 linq-to-sql 切换到 linq-to-entities,现在我得到了错误

The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.

对于这一行:

var a = db.Table.Single(d => d.Date == dates[0]);

(在这种特殊情况下修复它很容易,如

var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);

)

但是为什么这在 linq-to-sql 中有效,但在 linq-to-entities 中无效?他们是否使 linq-to-entities 比 linq-to-sql 更糟糕?我错过了什么?

4

1 回答 1

5

那是因为 L2E 只是尝试将您的查询转换为 sql 命令。因此,任何额外的东西(像 .ToString() 这样的方法,以及其他不能转换为 SQL 的东西)都会导致该异常。

然而,像 linq to objects 这样的 L2S 实现了 IEnumerable。因此,它们的目标是不同的:L2E 将 linq 查询转换为 sql 命令,L2O 用于处理内存中的 IEnumerable 对象,而 L2S 用于建模和处理数据库。

现在,如果希望能够在 EF 项目中使用 L2S 查询(使用 L2E),则应首先将从 DbContext 检索到的数据转换为 IEnumerable:

var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]); 
// or any other methods...
于 2013-07-31T19:48:53.757 回答