Asa*_*sad 9 c# linq linq-to-entities linq-to-sql
为什么我收到此错误:
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();
//
//
}
Run Code Online (Sandbox Code Playgroud)
代码编译安全,但只有在调用相应部分时才会中断.我是LINQ的新手,因此不知道哪些方法适用于LINQtoSQL或LINQtoEntities.这意味着更多错误!我们不记得所有这些方法.
我的问题是,如果适用于某些类型/场景的方法存在局限性,为什么它们出现在Intellisense中?
编辑:任何解决方法/技术有助于了解是否支持?
对于LINQtoSQL/Entities,查询全部细分为表达式树,然后传递给提供者API.提供者无法提供有关他们支持或不支持的树的编译时信息,因为没有语法差异.唯一的选择是让他们提供运行时数据.
例如,在表达式树形式中,Single和First都显示为MethodCallExpression实例.
Microsoft拥有Linq to Entities 中支持和不支持的方法的完整列表.这是找到这些信息的地方.
您会注意到,在分页方法一节中,Single和SingleOrDefault方法实际上被列为"不支持".
正如Jared指出的那样,编译器在编译时不知道您正在使用哪个提供程序,因此它无法强制提供程序可能实现或不实现的扩展方法的编译时安全性.您将不得不依赖文档.