LINQ to Entities no reconoce el método ‘Int32 Parse (System.String)’ método, y este método no se puede traducir a una expresión de tienda

Estoy usando Entity Framework, y tengo una línea de código que está tomando una var y traduciéndola a un iint para la base de datos.

var record = context.enrollments.SingleOrDefault (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID)); 

Cada vez que trato de ejecutarlo, recibo este error. “LINQ to Entities no reconoce el método ‘Int32 Parse (System.String)’, y este método no se puede traducir a una expresión de tienda.”

Lo he intentado también

  var record = context.enrollments.FirstOrDefault (row => row.userId == Convert.ToInt32(UserID) && row.classId == Convert.ToInt32(ClassID)); 

y todo lo que recibo es este mensaje de error, “LINQ to Entities no reconoce el método ‘Int32 ToInt32 (System.String)’, y este método no se puede traducir a una expresión de tienda

y finalmente lo he intentado también, lo que sé es inusual, pero ha funcionado en el pasado para situaciones similares.

 var record = context.enrollments.SingleOrDefault (row => row.userId == CommonDLL.Sanitize.ConvertType(UserID) && row.classId == CommonDLL.Sanitize.ConvertType(ClassID)); 

En el cual obtengo este error Como pueden ver, he intentado varias cosas diferentes y nada funciona, por lo que cualquier ayuda sería genial.

en Linq to Entity , debe usar los métodos de su query compatibles con su provider para convertirlos en expression tree para que se ejecute en su Data Base .

todos los proveedores deben admitir algunos métodos por defecto denominados Canonical Functions ( Leer más aquí ), y también puede definir su user defined function y su stored procedure como edm functions para usar en linq query ( Lea más aquí ) y ( Aquí ).

Además, puede utilizar métodos que son compatibles con los proveedores y se pueden convertir en expression tree que se encuentran en EntityFunctions y SqlFunctions .

y finalmente sobre su pregunta, puede convertir ClassID y ClassID antes de su consulta, así:

 var UID = int.Parse(UserID); var CID = int.Parse(ClassID); var record = context.enrollments.SingleOrDefault (row => row.userId == UID && row.classId == CID); 

Esto funciona para mí:

  var iId = int.Parse(TextBox1.Text); var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault(); 

Para que funcione, conviene convertir el valor de su cuadro de texto fuera de la expresión lambda.