LINQ 表达式节点类型 'ArrayIndex' 在 LINQ to Entities 中不受支持。但受 Linq-to-SQL 支持



一个项目刚刚从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?它们是否使"链接到实体"比"链接到sql"更糟糕?我错过了什么?

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

然而,像linq到object这样的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...

最新更新