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)
那失败了.但是,我很好奇为什么在编译时没有捕到它?是否存在这样的情况,这可以防止这种声明的编译时间错误?
它不是在编译时捕获的,因为它完全有效的C#.表达式转换为适当的表达式树 - 它只是实体框架不支持的表达式树.不同的LINQ提供商可能能够支持它.
C#编译器对LINQ提供程序一无所知,也不应该.它知道的唯一相关方面是如何从lambda表达式构造表达式树,如何调用扩展方法,以及如何使用查询表达式(这里不使用,但通常是LINQ的一部分).
区分语言支持和库支持非常重要- 特别是在LINQ的情况下.