Создание коллекции SelectListItem с помощью LINQ - PullRequest
19 голосов
/ 22 марта 2012

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

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 из моих сущностей?

Ответы [ 2 ]

37 голосов
/ 22 марта 2012

ToString() можно использовать только в Linq to Objects.Простое решение - вставить .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 });
9 голосов
/ 22 марта 2012

Я думаю, что вы ищете 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 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...