Подтвердить что ты не робот

LINQ to Entities не распознает метод Int32 Int32 (System.String) ', и этот метод не может быть переведен в выражение хранилища

Я пытаюсь создать контекст базы данных запроса с использованием Linq to Entities, и я получаю эту ошибку:

INQ to Entities не распознает метод Int32 Int32 (System.String) ', и этот метод не может быть переведен в выражение хранилища. `

код:

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

Я пробовал это после просмотра этого

public IEnumerable<CourseNames> 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();
}

Но это вызывает ошибку:

"В текущем контексте имя" o "не существует"

Это мой код для класса GetCourseName

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

Ответ 1

public IEnumerable<CourseNames> 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
                  });
}

Ответ 2

Вы также можете вернуть значение в виде строки (поскольку она, по-видимому, сохранена), а затем преобразовать ее после.

Ошибка в 'o', находящаяся вне контекста, состоит в том, что вы только объявляете o в запросе Linq, и в эту область можно ссылаться только.

Ответ 3

Если вы не хотите материализовать запрос (получить данные), вы можете использовать cast (т.е. (int) o.CourseId). Преобразуется в инструкцию SQL CAST AS.

Ответ 4

Явное преобразование простое и работает: (int) o.CourseID

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