Member 14552976 Ответов: 1

System.notsupportedexception: 'LINQ to entities не распознает метод 'int32 toint32(system.string)', и этот метод не может быть переведен в выражение хранилища.'


System.NotSupportedException: 'LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.'

я хочу получить идентификатор пользователя, чей otp совпадает с opt, введенным пользователем.

Что я уже пробовал:

public JsonResult VerifyOTP(строка otp)
{
использование (var db = new OfficeEntities())
{
Счет = новый аккаунт();
var num=(int.Parse(otp));

БД.счета.Где(x => x.Otp == num).Выберите(x => x.UserId).Метода singleordefault();

if (account == null) {
возврат Json(false);
}
счет.Метод isactive = истина;
БД.запись(счет).Состояние = System.Data.Entity.EntityState.Модифицированный;
дБ.Метод SaveChanges();
return Json(true);

}

phil.o

Предоставленный вами кодовый блок и сообщение об ошибке не совпадают; в вашем коде Найдите метод с именем ToInt32 принятие строки в качестве аргумента и возврат целого числа. Когда вы найдете его, вы можете заменить его на int.Parse() или int.TryParse() метод.

1 Ответов

Рейтинг:
1

Richard Deeming

Этот код все еще не имеет смысла:

Account account = new Account();
Объявите переменную для хранения экземпляра Account класс, и установите его в новый экземпляр класса. Account класс.
db.Accounts.Where(...).Select(...).SingleOrDefault();
Объявите и выполните запрос LINQ. Выбросьте результат.
if (account == null) { ... }
Ты же знаешь, что это не так null. Вы устанавливаете его на новый экземпляр Account класс, и вы никогда его не обновляли.
account.IsActive = true;
Вы обновляете пустой экземпляр класса, который не подключен к вашей базе данных.
db.SaveChanges();
Нет никаких изменений для сохранения, потому что вы не изменили никаких сущностей, подключенных к вашей базе данных.

Как я уже упоминал в комментариях к вашему предыдущему вопросу, используйте:
Account account = db.Accounts.SingleOrDefault(...);

Сочетание этого с решением Мацея дает:
public JsonResult VerifyOTP(int otp)
{
    using (var db = new OfficeEntities())
    {
        Account account = db.Accounts.SingleOrDefault(x => x.Otp == otp); 
        if (account == null) 
        { 
            return Json(false);
        }
        
        account.IsActive = true;
        db.SaveChanges();
        return Json(true);
    }
}


Maciej Los

Хорошо объяснил!

Member 14552976

здесь я хочу выбрать идентификатор, чей otp совпадает с otp, введенным пользователем, а затем обновить IsActive до true