【发布时间】:2013-03-18 18:46:52
【问题描述】:
一个项目刚刚从 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 更糟? 我错过了什么?
【问题讨论】:
-
LINQ to SQL 和 LINQ to Entities 完全分开开发,这里没有相关的共享代码。它需要 LINQ to SQL 中的额外支持,因为乍一看没有意义(看起来您正试图将
dates作为数组参数传递,并让服务器读取第一个元素),所以我我猜测它不是很常用,因此根本没有考虑将 LINQ to Entities 考虑在内。由于这是一个猜测,我将避免将其发布为答案。 -
对我来说它看起来像一个错误。在转换为 SQL 之前,应首先将表达式树解析为最简单的表达式。这基本上是 @dontomaso 通过预先评估日期 [0] 所做的事情,但不必手动执行(尤其是对于这样一个简单的表达式)。
标签: entity-framework linq-to-sql linq-to-entities