代码之家  ›  专栏  ›  技术社区  ›  Asad

错误,Linq to Entities不支持方法

  •  9
  • Asad  · 技术社区  · 15 年前

    为什么出现此错误:

    linq to实体不支持方法“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或LinqToEntity的方法。这意味着更多的错误!我们不能这样记住所有的方法。

    我的问题是,如果对适用于某些类型/场景的方法有限制,为什么它们在intellisense中出现?

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

    3 回复  |  直到 15 年前
        1
  •  6
  •   Aaronaught    15 年前

    微软有一个完整的 list of supported and unsupported methods 在Linq to实体中。这就是找到这些信息的地方。

    你会注意到 Single SingleOrDefault 方法实际上在分页方法一节中被列为“不支持”。

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

        2
  •  6
  •   JaredPar    15 年前

    对于LinqToSQL/实体,查询都被分解为表达式树,然后传递给提供程序API。提供程序无法提供有关它们所支持或不支持的树的编译时信息,因为没有语法差异。唯一的选择是他们提供运行时数据。

    例如,在表达式树形式中,第一个和第一个都显示为 MethodCallExpression 实例。

        3
  •  -1
  •   Mark Brackett    15 年前

    不幸的是,这也是R elative immaturity of EF 以及 Object Relational Impedance Mismatch .

    Documentation 如果你选择走这条路,是你的朋友。