.Net 4.0 无法将“System.Collections.Generic.List`1[ClassName]”类型的对象转换为“ClassName”类型

Posted

技术标签:

【中文标题】.Net 4.0 无法将“System.Collections.Generic.List`1[ClassName]”类型的对象转换为“ClassName”类型【英文标题】:.Net 4.0 Unable to cast object of type 'System.Collections.Generic.List`1[ClassName]' to type 'ClassName' 【发布时间】:2021-08-27 19:11:41 【问题描述】:
public class SkillView 
public string Name  get; set;  
public IList<SkillValueView> Selected  get; set; 

public class SkillValueView 
    public string APlan  get; set; 
    public DateTime? DueDate  get; set; 

private IList<SkillValueView> MapToSkillValueList(IGrouping<string, GetSession_Result> query)
    
        var actionItem = query.FirstOrDefault();
        List<SkillValueView> LSVV = new List<SkillValueView>();
        SkillValueView SVV = new SkillValueView();

        for (int i = 0; i < actionItem.NoOf; i++)
            
                SVV.APlan = actionItem.ExAPlan;
                SVV.DueDate = actionItem.ExDueDate;
                LSVV.Add(new SkillValueView()  APlan = SVV.APlan, DueDate = SVV.DueDate );
            
        
        return LSVV;
    

private SkillView MapToSkill(IGrouping<int, GetSession_Result> query)
    var skill = query.FirstOrDefault();
    return new SkillView()
        
            Name = skill.SkillName,
            Selected = query.GroupBy(s => s.ExAPlan).Select(MapToSkillValueList).ToList()
        ; 

我无法映射此 >Selected = query.GroupBy(s => s.ExAPlan).Select(MapToSkillValueList).ToList() 并收到错误 无法投射对象类型为“System.Collections.Generic.List`1[IsaiX.Coach.Models.SkillValueView]”以键入“IsaiX.Coach.Models.SkillValueView”。

【问题讨论】:

我相信您正在寻找SelectMany 而不是Selectquery.GroupBy(s =&gt; s.ExAPlan).SelectMany(MapToSkillValueList).ToList()。 "SelectMany 将生成的序列扁平化为一个序列" 感谢@Igor 它解决了问题。 【参考方案1】:

在这种情况下,您应该使用SelectMany 而不是Select

query.GroupBy(s => s.ExAPlan).SelectMany(MapToSkillValueList).ToList(). 

将序列的每个元素投影到 IEnumerable 并将生成的序列展平为一个序列

【讨论】:

以上是关于.Net 4.0 无法将“System.Collections.Generic.List`1[ClassName]”类型的对象转换为“ClassName”类型的主要内容,如果未能解决你的问题,请参考以下文章

C#.NET 4.0 - HttpWebRequest.GetRepsonse() 无法访问 Web 服务

开发 Azure .Net 4.0 应用程序

无法在 C#.Net 4.0 Visual Studio 中添加对 rzdcx.DLL 的引用

如何在 asp.net 4.0 中获取所有网络打印机

无法加载具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序

Win10系统无法安装.net framework 4.0怎么办