Подтвердить что ты не робот

Создание коллекции SelectListItem с помощью LINQ

Я пытаюсь отобразить выпадающий список пользователей в моем представлении. Вот код, который я использую в своем методе контроллера:

var users = _usersRepository.Users.Select(u => new SelectListItem
                                    {
                                        Text = u.FirstName + " " + u.LastName,
                                        Value = u.UserID.ToString()
                                    }

return View(new MyViewModel { Users = users });

Я получаю сообщение об ошибке, пытающееся преобразовать UserID в строку:

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

Как создать коллекцию SelectListItem из моих объектов?

4b9b3361

Ответ 1

ToString() может использоваться только в Linq для объектов. Простым решением является вставка .ToList() следующим образом:

var users = _usersRepository.Users.ToList().Select(u => new SelectListItem
                                    {
                                        Text = u.FirstName + " " + u.LastName,
                                        Value = u.UserID.ToString()
                                    });

return View(new MyViewModel { Users = users });

Это приведет к возврату всех пользователей из вашей таблицы пользователя. Если вы можете уменьшить количество пользователей, полученных из базы данных, ваш запрос будет более эффективным, например.

var users = _usersRepository.Users.Where( u => .... ).ToList().Select(u => new SelectListItem
                                    {
                                        Text = u.FirstName + " " + u.LastName,
                                        Value = u.UserID.ToString()
                                    });

return View(new MyViewModel { Users = users });

Ответ 2

Я думаю, что вы ищете SqlFunctions

using System.Data.Objects.SqlClient;

var users = _usersRepository.Users.Select(u => new SelectListItem
                                    {
                                        Text = u.FirstName + " " + u.LastName,
                                        Value = SqlFunctions.StringConvert((double?)u.UserID)
                                    }

return View(new MyViewModel { Users = users });