LINQ to Entities не распознает метод ' Int32 Parse (System.String) ' метод, и этот метод не может быть переведен в выражение хранилища
Я использую Entity Framework, и у меня есть строка кода, которая принимает var и переводит его обратно в iint для базы данных.
var record = context.enrollments.SingleOrDefault
(row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID));
всякий раз, когда я пытаюсь запустить его, я получаю ошибку так. "LINQ to Entities не распознает метод' Int32 Parse(System.String) ' метод, и этот метод не может быть переведен в выражение хранилища."
Я тоже пробовал это
var record = context.enrollments.FirstOrDefault
(row => row.userId == Convert.ToInt32(UserID)
&& row.classId == Convert.ToInt32(ClassID));
и все, что я получаю, это сообщение об ошибке: "LINQ to Entities делает не распознать метод ' Int32 ToInt32 (System.String) ' метод, и этот метод не может быть переведен в выражение хранилища
и, наконец, я попробовал это, что, я знаю, необычно, но в прошлом это работало для подобных ситуаций.
var record = context.enrollments.SingleOrDefault
(row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID)
&& row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID));
в котором я получаю эту ошибку. Как вы можете видеть, я пробовал разные вещи, и ничего не работает, поэтому любая помощь была бы отличной.
2 ответов
на Linq to Entity
, вы должны использовать методы, в свой query
, который поддерживается вашим provider
преобразовать их в expression tree
для запуска на вашем Data Base
сторону.
все поставщики должны поддерживать некоторые методы по умолчанию называется Canonical Functions
(Подробнее Здесь), а также вы можете определить свой user defined function
и stored procedure
as edm functions
чтобы использовать linq query
(Подробнее Здесь) и (здесь).
кроме того, вы можете использовать методы, которые поддерживается поставщиками и может быть преобразован в expression tree
, которые в EntityFunctions и SqlFunctions.
и, наконец, о вашем вопросе, вы можете конвертировать UserID
и ClassID
перед вашим запросом, вот так:
var UID = int.Parse(UserID);
var CID = int.Parse(ClassID);
var record = context.enrollments.SingleOrDefault
(row => row.userId == UID && row.classId == CID);
это работает для меня:
var iId = int.Parse(TextBox1.Text);
var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault();
чтобы сделать эту работу, вы должны преобразовать значение textbox вне лямбда-выражения.