首页 > 解决方案 > .Net 4.0 无法将“System.Collections.Generic.List`1[ClassName]”类型的对象转换为“ClassName”类型

问题描述

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'。

标签: c#.netlinqlambdac#-4.0

解决方案


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

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

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


推荐阅读