tom*_*msv 5 linq-to-entities entity-framework linq-to-sql
一个项目刚刚从linq-to-sql切换到linq-to-entities,现在我收到了错误
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
Run Code Online (Sandbox Code Playgroud)
对于这一行:
var a = db.Table.Single(d => d.Date == dates[0]);
Run Code Online (Sandbox Code Playgroud)
(在这种特殊情况下修复它很容易,如在
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
Run Code Online (Sandbox Code Playgroud)
)
但为什么这在linq-to-sql中有效,但在linq-to-entities中却没有用?他们是否使linq-to-entities比linq-to-sql更糟?我错过了什么?
这是因为 L2E 只是尝试将您的查询转换为 sql 命令。因此,任何其他内容(如 .ToString() 之类的方法,以及其他无法转换为 SQL 的内容)都会导致该异常。
然而,像 linq to 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...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8010 次 |
| 最近记录: |