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

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

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

Я пробовал это, увидев this < / а>

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; }
    }
}

person user1905332    schedule 14.12.2012    source источник
comment
Попробуйте int.Parse(o.CourseID); ошибка связана с тем, что EF не знала, как писать Convert.ToInt32 в терминах SQL, но я думаю, что он должен понимать int.Parse .. (лучше всего было бы использовать соответствующий тип столбца и избежать необходимости иметь дело с это преобразование :)   -  person    schedule 15.12.2012
comment
@pst с использованием int.parse выдает ту же ошибку. Имя 'o' не существует в текущем контексте, и я не могу использовать тот же тип столбца, он также показывает ошибку. Невозможно неявно преобразовать тип ..... В любом случае спасибо за попытку помочь мне!   -  person user1905332    schedule 15.12.2012
comment
Другой способ обойти эту проблему (где EF не может преобразовать какое-либо выражение в SQL) - сначала запустить более простой запрос, а в конце его принудительно заполнить через .ToList (). Как только он окажется в памяти, вам больше не придется преобразовывать свои выражения в SQL.   -  person Heather    schedule 15.12.2012
comment
@ user1905332 Нет, это другая проблема (o выходит за рамки). Вернитесь к первому запросу, но замените Convert.ToInt32 на int.Parse, хмм неважно, это наоборот. Кажется, разница между IEnumerable и IQueryable?   -  person    schedule 15.12.2012
comment
@pst Не беспокойтесь, ответ lazyberezovsky отправил работает, в любом случае спасибо, что пытались мне помочь!   -  person user1905332    schedule 15.12.2012
comment
@Heather решила проблему, в любом случае спасибо за попытку мне помочь!   -  person user1905332    schedule 15.12.2012


Ответы (4)


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

person bubi    schedule 24.06.2015

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

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

person Matthew    schedule 14.12.2012
comment
ответ lazyberezovsky отправил работы, в любом случае спасибо, что пытались мне помочь! - person user1905332; 15.12.2012

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

var course = from o in entities.UniversityCourses
                select new CourseNames
                {
                    CourseID = (int)o.CourseID,
                    CourseName = o.CourseName,
                 };
person user3131922    schedule 16.09.2015
comment
Это даже не скомпилируется: CS0030: невозможно преобразовать тип 'string' в 'int' - person poizan42; 04.06.2020
comment
Сначала приведите к object, затем к int, затем он будет компилироваться. Однако тогда Linq to Entities по-прежнему не распознает его. Однако Linq to SQL будет. - person Calculuswhiz; 09.12.2020

person    schedule
comment
Есть ли способ получить преобразование str- ›int без необходимости принудительно в памяти? - person ; 15.12.2012
comment
@lazyberezovsky Большое спасибо! Получилось, я больше двух часов пытался в этом разобраться! Еще раз спасибо! :) - person user1905332; 15.12.2012
comment
@pst, насколько я знаю, только нет встроенной возможности сделать это преобразование на стороне сервера - person Sergey Berezovskiy; 15.12.2012
comment
Есть, используя явное преобразование (см. Ответы ниже) - person Jonathan M; 11.03.2016
comment
Следует отметить, что вместо этого лучше использовать AsEnumerable, чтобы избежать создания ненужного списка в памяти. - person juharr; 10.08.2019