为什么我收到此错误:
LINQ to Entities不支持“单个”方法。请考虑使用“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。这意味着更多错误!我们不记得所有这些方法。
我的问题是,如果适用于某些类型/场景的方法存在限制,为什么它们会出现在智能感知中?
编辑:任何解决方法/技术都有助于了解是否支持?
答案 0 :(得分:6)
对于LINQtoSQL / Entities,查询全部细分为表达式树,然后传递给提供者API。提供者无法提供有关他们支持或不支持的树的编译时信息,因为没有语法差异。唯一的选择是让他们提供运行时数据。
例如,在表达式树形式中,Single和First都显示为MethodCallExpression
实例。
答案 1 :(得分:6)
Microsoft在Linq to Entities中有一个完整的list of supported and unsupported methods。这是找到这些信息的地方。
您会注意到Single
和SingleOrDefault
方法实际上在“分页方法”一节中列为“不受支持”。
正如Jared指出的那样,编译器在编译时不知道您正在使用哪个提供程序,因此它无法强制提供程序可能会或可能不会实现的扩展方法的编译时安全性。你将不得不依赖文档。
答案 2 :(得分:-1)
不幸的是,这是r elative immaturity of EF和Object Relational Impedance Mismatch的另一个迹象。
如果你选择走这条路,那么Documentation就是你的朋友。