#entity-framework #asp.net-mvc-3 #ef-code-first
#entity-framework #asp.net-mvc-3 #ef-code-first
Вопрос:
Я могу успешно вернуть модель из моего контроллера следующим образом:
return View(lemonadedb.Messages.ToList() );
На мой взгляд, это прекрасно интерпретируется.
Теперь я хочу показывать сообщения только там, где Messages.user == Membership.getUser().toString().
Но когда я делаю это:
return View(lemonadedb.Messages.Where( p => p.user == Membership.GetUser().ToString()).ToList());
Я получаю:
Система «LINQ для сущностей не распознает метод».Метод String toString()’, и этот метод не может быть преобразован в выражение хранилища.’
Мне нужен какой-то способ сузить результаты таблицы сообщений.
Должен ли я как-то использовать метод find ()? Я думал, что это только для идентификаторов.
Как я должен это сделать?
Комментарии:
1. Выстрел … Я только что понял, что нелегко возвращать и обрабатывать несколько моделей. Я думаю, мне следует использовать механизм ViewData.
Ответ №1:
Причина, по которой у вас возникла эта проблема, заключается в том, что Entity Framework пытается вычислить выражение Membership.GetUser().ToString()
в SQL-запросе. Вам нужно создать новую переменную, чтобы сохранить значение этого выражения и передать его в ваш запрос. Затем Entity Framework просто интерпретирует это так, как вы ожидаете.
Должно сработать следующее:
var user = Membership.GetUser().ToString();
return View(lemonadedb.Messages.Where(p => p.user == user).ToList());
Я подозреваю, что это очень распространенная ошибка, которую люди допускают при написании запросов Entity Framework.