LINQ to Entities non riconosce il metodo ‘Int32 Int32 (System.String)’ metodo e questo metodo non può essere tradotto in un’espressione di archivio

Sto provando a interrogare il contesto del database usando Linq alle quadro e sto ottenendo questo errore:

INQ to Entities non riconosce il metodo ‘Int32 Int32 (System.String)’, e questo metodo non può essere tradotto in un’espressione di archivio.

Codice:

public IEnumerable GetCourseName() { var course = from o in entities.UniversityCourses select new CourseNames { CourseID = Convert.ToInt32(o.CourseID), CourseName = o.CourseName, }; return course.ToList(); } 

Ho provato così dopo aver visto questo

 public IEnumerable GetCourseName() { var temp = Convert.ToInt32(o.CourseID); var course = from o in entities.UniversityCourses select new CourseNames { CourseID = temp, CourseName = o.CourseName, }; return course.ToList(); } 

Ma genera un errore:

“Il nome ‘o’ non esiste nel contesto attuale”

Questo è il mio codice per la class GetCourseName

 namespace IronwoodWeb { public class CourseNames { public int CourseID { get; set; } public string CourseName { get; set; } } } 

 public IEnumerable GetCourseName() { var courses = from o in entities.UniversityCourses select new { o.CourseID, o.CourseName }; return courses.ToList() // now we have in-memory query .Select(c => new CourseNames() { CourseID = Convert.ToInt32(c.CourseID), // OK CourseName = c.CourseName }); } 

Si potrebbe anche riportare il valore come una stringa (come apparentemente memorizzata) e quindi Converti dopo.

L’errore su “o” è fuori dal contesto è che stai solo dichiarando o nella query di Linq e può essere solo referenziato in quell’ambito.

Se non vuoi materializzare la query (recuperare i dati) puoi usare cast (ie (int) o.CourseId). Viene convertito in istruzione SQL CAST AS.

La conversione esplicita è semplice e funziona: (int) o.CourseID

 var course = from o in entities.UniversityCourses select new CourseNames { CourseID = (int)o.CourseID, CourseName = o.CourseName, };