“IEnumerable<>”不包含“”的定义,找不到接受类型“IEnumerable<>”的第一个参数的扩展方法

'IEnumerable<>' does not contain a definition for '', no extension method '' accepting a first argument of type 'IEnumerable<>' could be found

提问人:bootsy 提问时间:7/15/2019 最后编辑:Prologbootsy 更新时间:7/16/2019 访问量:1060

问:

我在控制器中收到此错误。

我调用了一个服务,并尝试在控制器中使用它,但我收到此错误。IEnumerable

public IEnumerable<User> GetUsers()
{
    var userList = new List<User>();
    userList.Add(new User()
    {
        Email = "[email protected]",
        Enabled = true,
        PhoneNumber = "555-555-5555",
        Username = "test"
    });
    userList.Add(new User()
    {
        Email = "[email protected]",
        Enabled = true,
        PhoneNumber = "317-455-5555",
        Username = "anotheruser"
    });

    return userList;
}

public ActionResult Details()
{
    var user = _userService.GetUsers();
    var model = new UserViewModel()
    {
        UserName = user.Username,
        Enabled = user.Enabled
    };

    return View(model);
}

我希望从控制器中的“详细信息”操作中获取用户信息以显示在视图中,这是我收到的错误消息。

C# ASP.NET 核心 IEnumerable

评论


答:

2赞 Chris Pratt 7/16/2019 #1

您的变量实际上是一个用户列表,但您尝试访问的是实际用户实例上的属性,而不是列表。换句话说,您需要枚举用户列表:user

var users = _userService.GetUsers();
var model = new List<UserViewModel>();
foreach (var user in users)
{
    model.Add(new UserViewModel
    {
        UserName = user.Username,
        Enabled = user.Enabled
    });
}

或者更简单地说:

var model = _userService.GetUsers().Select(user => new UserViewModel
{
    UserName = user.Username,
    Enabled = user.Enabled
});

LINQ 方法枚举集合并将 lambda 应用于返回由 lambda 的返回值组成的新列表的每个项。Select