LINQ where子句中的数组元素导致运行时错误与编译时错误

Leg*_*ion 0 .net c# linq linq-to-entities entity-framework

我已经知道你不能在带有LINQ的where子句中使用数组元素.例如:

Department department = db.Departments.Single(d => d.DepartmentID == teams[i].DepartmentID);
Run Code Online (Sandbox Code Playgroud)

那失败了.但是,我很好奇为什么在编译时没有捕到它?是否存在这样的情况,这可以防止这种声明的编译时间错误?

Jon*_*eet 5

它不是在编译时捕获的,因为它完全有效的C#.表达式转换为适当的表达式树 - 它只是实体框架不支持的表达式树.不同的LINQ提供商可能能够支持它.

C#编译器对LINQ提供程序一无所知,也不应该.它知道的唯一相关方面是如何从lambda表达式构造表达式树,如何调用扩展方法,以及如何使用查询表达式(这里不使用,但通常是LINQ的一部分).

区分语言支持和支持非常重要- 特别是在LINQ的情况下.