使用LINQ,如何在C#中将List <object>转换为List <selectlistitem>?

时间:2015-09-28 16:23:46

标签: c# linq

我正在尝试呈现用户的下拉列表,并且很难将用户对象列表转换为List。我尝试过的各种尝试都包括使用.ToList()和.Cast,但这些尝试都失败了,如下所述。

这是我现在的方法。

public static List<SelectListItem> getStandardDropdownList(EnumStatusIsActive.StatusIsActive statusIsActive, UserListValueType userListValueType)
{
    List<SelectListItemUser> userList = Shared.getDataForStandardDropdownListItemUser(UserListType.ExternalUser, statusIsActive, null);
    List<SelectListItem> standardList = userList.Select(u => new SelectListItem
    {
        Text = u.UserName,
        Value = u.UserToken.ToString()
    });
}

失败的地方是userList.Select()。上述错误消息是:

  

无法隐式转换类型   &#39; System.Collections.Generic.IEnumerable&#39;   到&#39; System.Collections.Generic.List&#39;。   存在显式转换(您是否错过了演员?)

所以我尝试了.ToList(),如下所示。但这导致了同样的错误。

List<SelectListItem> standardList = userList.ToList().Select(u => new SelectListItem ...

我尝试使用Cast,就像这样......

IEnumerable<SelectListItemUser> userCollection = Shared.getDataForStandardDropdownListItemUser(UserListType.ExternalUser, statusIsActive, null);
List<SelectListItem> standardList = userCollection.Cast<SelectListItemUser>().Select(u => new SelectListItem ...

仍然没有爱,同样的错误信息。现在,我可以通过for / each循环遍历列表以创建必要的List<SelectListItem>,但我更喜欢通过Linq执行此操作。我需要做些什么改变来实现这个目标?谢谢!

2 个答案:

答案 0 :(得分:4)

最后ToList()来电:

List<SelectListItem> standardList = userList.Select(u => new SelectListItem
{
    Text = u.UserName,
    Value = u.UserToken.ToString()
}).ToList();

答案 1 :(得分:3)

你很亲密。选择是正确的方法,你只需要在选择之前做一个ToList()。 :