Member 12821006 Ответов: 1

Кто-нибудь может помочь? Спасибо заранее


во время работы он дает исключение, как показано ниже:


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


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

demo db = (from c in ob.demoes
                       where c.id ==Convert.ToInt32(txtboxId)
                       select c).FirstOrDefault();
            db.name = txtboxName.Text;
            db.salary = int.Parse(txtboxSalary.Text);
            ob.SaveChanges();

1 Ответов

Рейтинг:
10

OriginalGriff

Попробуйте сначала выполнить преобразование:

int id = Convert.ToInt32(txtboxId);
demo db = (from c in ob.demoes
           where c.id == id
           select c).FirstOrDefault();
db.name = txtboxName.Text;
db.salary = int.Parse(txtboxSalary.Text);
ob.SaveChanges();

Но в этом нет необходимости. Конечно, он прекрасно работает в обычном Linq:
int id = 66;
string sid = "66";
List<MyClass> list = new List<MyClass>();
MyClass mc = new MyClass();
mc.id = 55;
list.Add(mc);
mc = new MyClass();
mc.id = 66;
list.Add(mc);
var x = (from c in list
        where c.id == id
        select c).FirstOrDefault();
var y = (from c in list
         where c.id == Convert.ToInt32(sid)
         select c).FirstOrDefault();

Компилируется и работает нормально, а x и y содержат один и тот же экземпляр.


Member 12821006

Спасибо @OriginalGriff, что он работает.

Richard Deeming

"Обычный LINQ" - он же LINQ to Objects-не должен переводить запрос на другой язык. LINQ to Entities делает это, и в результате он поддерживает только ограниченное число методов и создает исключение для любого, который он не распознает. :)

OriginalGriff

Я думал, что это должно быть что - то вроде этого-вот почему я предложил сначала преобразовать его. А также "Так, наверное, эффективнее": смех: