使用LINQ创建SelectListItem的集合

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

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的集合?

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 }); 

这将返回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 }); 

我想你正在寻找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 });