2011-03-08 40 views
47

Soy un novato sobre entity framework y linq. Mi consulta es asíLINQ to Entities no reconoce el método Int32 get_Item (Int32)

var query = (from d in db.MYTABLE 
      where d.RELID.Equals(myInts[0]) 
      select d.ID).Distinct(); 

List<int?> urunidleri = query.ToList(); 

Cuando ejecuto el código, me dieron el mensaje de error "LINQ a Entidades no reconoce el método Int32 get_Item (Int32)". ¿Cómo puedo resolver mi problema?

Gracias ...

Respuesta

108

necesita almacenar su int en una variable, por lo que ADO.NET Entity Framework no está tratando de tirar de toda la matriz en su ámbito de aplicación.

var myInt = myInts[0]; 

var query = (from d in db.MYTABLE 
      where d.RELID.Equals(myInt) 
      select d.ID).Distinct(); 

List<int?> urunidleri = query.ToList(); 
+2

Hablando en general, ¿por qué LINQ to Entities está intentando llamar a get_Item (Int32) allí? (pregunta poste). – SamFlushing

+3

Porque C# genera árboles de expresión que involucran la matriz. Estas expresiones se convierten en SQL por EF, y EF no sabe qué hacer con la matriz. –

6
var firstInt = myInts[0]; 
var query = (from d in db.MYTABLE 
      where d.RELID.Equals(firstInt) 
      select d.ID).Distinct(); 

List<int?> urunidleri = query.ToList(); 
+0

Ok veo, pero ahora estoy recibiendo un error diferente. "Solo los tipos primitivos ('como Int32, String y Guid') son compatibles en este contexto" –

+0

@Murat, y ¿cuál es el tipo en myInts? Mueve el mouse sobre la 'var' antes de' firstInt' para averiguarlo. –

+0

puedo usar foreach para el objeto IQueryable . Por ejemplo, foreach (var item in query) {int x = item.Value} –

-2

La consulta LINQ es finalmente transformado en una consulta SQL y LINQ no sabe qué hacer con Session["UserName"] (que recibe el elemento "nombre de usuario").

Una forma común para solucionar este es sólo para usar una variable local a la que se le asigna Session["UserName"] y que va a utilizar en la consulta LINQ ...

como

string loggedUserName = Session["LogedUsername"].ToString(); 
var userdetail = dc.faculties.Where(a => a.F_UserName.Equals(loggedUserName)).FirstOrDefault(); 

referencia http://mvc4asp.blogspot.in/

+3

¿Estás seguro de que estás respondiendo la pregunta correcta aquí? El OP no hace ninguna mención a 'Session' en absoluto y parece que esta pregunta ha tenido una respuesta aceptada durante varios años (no es que esto signifique que no puede agregarle algo, pero es más probable que sea un error). – Chris

Cuestiones relacionadas