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