Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ创建SelectListItem的集合_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 使用LINQ创建SelectListItem的集合

C# 使用LINQ创建SelectListItem的集合,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我试图在视图中显示用户的下拉列表。以下是我在控制器方法中使用的代码: var users = _usersRepository.Users.Select(u => new SelectListItem { Text = u.FirstName + " " + u.LastName,

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

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对象中使用。一个简单的解决方案是插入
.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 });

我想你在找我


看看这个:这会保留查询的延迟执行吗?因为如果是这样的话(我真的不知道怎么说),如果这很重要的话,这可能是一个更好的选择。延迟执行会被保留。LINQtoEntities提供程序能够将
SqlFunctions
的方法解析为它们的等效SQL。因此,您可以像编写和执行更典型的查询一样编写和执行此查询。很高兴知道!将此问题加入书签以供将来参考,感谢您的澄清!如果您不想接收所有列,您也可以使用:
var users=(从{u usersRepository.users where….中的u选择新的{u.FirstName,u.LastName,u.UserID}).ToList().select(u=>new-SelectListItem{Text=u.FirstName+“”+u.LastName,Value=u.UserID.ToString())
如果我们想让它通过
FirstName
来区分,该怎么办?@Halter您将无法在Linq的一行程序中做到这一点。在获得文本/值对之后,您必须迭代每个项目,将其添加到列表中,然后再次循环Linq结果,并检查列表是否包含您的项目,如果没有问题,则将项目添加到新的“更正列表”。
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 });