LINQ to Entities不支持错误,方法

为什么我收到此错误:

LINQ to Entities不支持“Single”方法。 请考虑使用“First”方法。

public ActionResult Details(int id) Line 27: { var result = (from d in _db.MovieSet Line 29: where d.Id == id Line 30: select d).Single(); // // } 

代码编译安全,但只有在调用相应部分时才会中断。 我是LINQ的新手,因此不知道哪些方法适用于LINQtoSQL或LINQtoEntities。 这意味着更多错误! 我们不记得所有这些方法。

我的问题是,如果适用于某些类型/场景的方法存在局限性,为什么它们出现在Intellisense中?

编辑:任何解决方法/技术有助于了解是否支持?

Microsoft拥有Linq to Entities 中支持和不支持的方法的完整列表 。 这是找到这些信息的地方。

您会注意到SingleSingleOrDefault方法实际上在“分页方法”一节中列为“不支持”。

正如Jared指出的那样,编译器在编译时不知道您正在使用哪个提供程序,因此它无法强制提供程序可能实现或不实现的扩展方法的编译时安全性。 您将不得不依赖文档。

对于LINQtoSQL / Entities,查询全部细分为表达式树,然后传递给提供者API。 提供者无法提供有关他们支持或不支持的树的编译时信息,因为没有语法差异。 唯一的选择是他们提供运行时数据。

例如,在表达式树forms中,Single和First都显示为MethodCallExpression实例。

不幸的是,这又是EF和对象关系阻抗不匹配的另一个表现。

如果您选择这条路线, 文档就是您的朋友。