2010-01-31 34 views
9

¿Por qué estoy recibiendo este error:error, el método no es compatible con LINQ a Entidades

El método 'Individual' no está soportado por LINQ a Entidades. Considere usar el método 'Primero' en su lugar.

  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(); 
      // 
      // 
      } 

Código compila seguro, pero sólo se rompe si se hace la llamada a la sección respectiva. Soy nuevo en LINQ, por lo tanto, no sé qué métodos son para LINQtoSQL o LINQtoEntities. Esto significa más errores! No podemos recordar todos los métodos de esta manera.

Mi pregunta es, si hay limitaciones a los métodos aplicables a ciertos tipos/escenarios, ¿por qué aparecen en Intellisense?

EDITAR: ¿Alguna solución alternativa/técnica útil para tener una idea si es compatible?

Respuesta

6

Microsoft tiene un completo list of supported and unsupported methods en Linq para Entidades. Ahí es donde ir para descubrir esta información.

Notarás que los métodos Single y SingleOrDefault de hecho figuran como "no compatibles" en la sección sobre Métodos de búsqueda.

Como señaló Jared, el compilador no sabe en tiempo de compilación qué proveedor está utilizando, por lo que no tiene forma de aplicar la seguridad en tiempo de compilación de los métodos de extensión que el proveedor puede o no implementar. En su lugar, tendrá que confiar en la documentación.

+1

Correcto (+1) para EF 1. Tenga en cuenta, sin embargo, que ambos métodos son compatibles con EF 4. –

6

En el caso de LINQtoSQL/Entidades, las consultas se dividen en árboles de expresiones que luego se pasan a las API del proveedor. Los proveedores no pueden proporcionar información de tiempo de compilación sobre los árboles que admiten o no, porque no hay diferencia sintáctica. La única opción es que proporcionen datos de tiempo de ejecución.

Por ejemplo, una vez en forma de árbol de expresión, tanto el único como el primero aparecen como una instancia MethodCallExpression.

+0

¿Alguna idea de cómo saber o simplemente "practicar hacer que el hombre sea perfecto"? –

+1

@ Asad, muchos proveedores tienen una lista de las llamadas que admiten en su documentación, salvo que es prueba y error :( – JaredPar

Cuestiones relacionadas