LINQ to Entities不支持LINQ表达式节点类型'ArrayIndex'。但是由linq-to-sql支持

时间:2013-03-18 18:46:53

标签: entity-framework linq-to-sql linq-to-entities

一个项目刚刚从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更糟? 我错过了什么?

1 个答案:

答案 0 :(得分:3)

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

但是,像对象linq这样的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...