【问题标题】:Unable to cast object of type 'System.Linq.GroupedEnumerable to type 'System.Collections.Generic.List无法将“System.Linq.GroupedEnumerable”类型的对象转换为“System.Collections.Generic.List”类型
【发布时间】:2013-04-15 15:54:50
【问题描述】:

我有这样的课程。

 public static SkillViewModel GetAllList(string ID)
{
    ListViewModel viewModel = new ListViewModel();
    DataTable dt = DAL.GetAllList(ID);

    List<Skill> skills = new List<Skill>();
    foreach (DataRow row in dt.Rows)
    {
        Skill skill = new Skill() { GroupName = row["GroupName"] != null ? row["GroupName"].ToString() : string.Empty, SubName = row["SubName"] != null ? row["SubName"].ToString() : string.Empty};
        skills.Add(skill);
    }
    viewModel.skills = skills;
    viewModel.skills = skills.GroupBy(x => x.GroupName);  //Showing error in this line
   return viewModel;

}

还有一个这样的:

 public class SkillViewModel
  {
    public List<Skill> skills { get; set; }
  }

  public class Skill
{
    [DisplayName("Sub Name")]
    [Required]
    public string SubName { get; set; }

    [DisplayName("Group Name")]
    [Required]
    public string GroupName { get; set; }
}

但是说它失败了

错误:无法隐式转换类型 'System.Collections.Generic.IEnumerable>' 到“System.Collections.Generic.List”。一个 存在显式转换(您是否缺少演员表?)

请帮忙。提前致谢。

【问题讨论】:

    标签: c# asp.net-mvc-2 casting


    【解决方案1】:

    只需在语句末尾添加ToList 和SelectMany,例如:

    viewModel.skills = skills.GroupBy(x => x.GroupName).SelectMany(r => r).ToList();
    

    使用SelectMany 会使组变平,不确定为什么要对数据进行分组,而您的属性是List&lt;Skill&gt;

    【讨论】:

    • 我认为在这种情况下两者都是错误的,ToList 将返回 List&lt;IGrouping&lt;T&gt;&gt; 而不是 ListT&gt;
    • @LukeHennerley,是的,刚刚用SelectMany 修改了我的答案,但这只会使分组项目变平
    • 我怀疑这只是 ViewModel 中的糟糕设计,似乎 OP 希望分配一个组,但该属性没有反映这一点
    • @Habib,感谢您的帮助。 List 给了我作为 GroupName 和 SubName 的项目列表。但是我需要根据这个 GroupName 对 SubNames 进行分组。使用它也是如此。另请参阅此链接。 stackoverflow.com/questions/15933149/…
    • 感谢您的帮助。
    【解决方案2】:

    您的Skills 属性是List&lt;T&gt;。

    您需要在分配属性时调用.ToList()。

    当您调用GroupBy 时,您将不再拥有T,而是拥有IGrouping&lt;T&gt;。这意味着您要么需要过滤您的群组并获得 List&lt;T&gt; 退出,要么将您的技能类型更改为:

    public List<IGrouping<Skill>> skills { get; set; }
    

    【讨论】:

    • 感谢您的帮助。
    猜你喜欢
    • 2022-01-14
    • 2016-02-10
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2015-09-14
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多