使用LINQ创建SelectListItem的集合

Ste*_*ven 19 c# asp.net asp.net-mvc

我正在尝试在我的视图中显示用户的下拉列表.这是我在控制器方法中使用的代码:

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

return View(new MyViewModel { Users = users });
Run Code Online (Sandbox Code Playgroud)

尝试转换UserID为字符串时出错:

LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式.

我如何SelectListItem从我的实体创建一个集合?

Phi*_*hil 38

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 });
Run Code Online (Sandbox Code Playgroud)

这将返回User表中的所有用户.如果您可以减少从数据库中获得的用户数量,那么查询将更有效,例如

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 });
Run Code Online (Sandbox Code Playgroud)


Sor*_*rax 9

我想你在找 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 });
Run Code Online (Sandbox Code Playgroud)