我正在尝试在我的视图中显示用户的下拉列表。这是我在控制器方法中使用的代码:
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
的集合?
答案 0 :(得分:35)
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 });
答案 1 :(得分: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 });