C# - Linq 将泛型列表转换为自定义类

lpe*_*ice 3 c# linq casting list

我已经声明了一个这样的自定义集合类:

public class WipCommesse
{        
    private string FNumCommessa;
    private int FIdTipologia, FTotQtaLetta;

    public int IdTipologia
    {
        get { return FIdTipologia; }
        set { FIdTipologia = value; }
    }

    public string NumCommessa
    {
        get { return FNumCommessa; }
        set { FNumCommessa = value; }
    }

    public int TotQtaLetta
    {
        get { return FTotQtaLetta; }
        set { FTotQtaLetta = value; }
    }

}

public class WipCommesseList : List<WipCommesse>
{

}
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我使用 Linq 对另一个列表进行分组,并且我想转换为我的自定义类型

   WipCommesseList wipGrouped = 
   (WipCommesseList)myList.GroupBy(x => new
                            {
                                x.IdTipologia,
                                x.NumCommessa
                            }).
                            Select(g => new WipCommesse()
                            {
                                IdTipologia = g.Key.IdTipologia,
                                NumCommessa = g.Key.NumCommessa,
                                TotQtaLetta = g.Sum(i => i.QtaLanciabile)
                            }).ToList();
Run Code Online (Sandbox Code Playgroud)

类的定义是相同的,但是当我调用 ToList() 方法时,它返回为 System.Collection.Generic.List 并且转换失败。

我该怎么做才能正确转换为我的班级?

net*_*niV 6

代码应更改如下:

 WipCommesseList wipGrouped = 
   new WipCommesseList(myList.GroupBy(x => new
                            {
                                x.IdTipologia,
                                x.NumCommessa
                            }).
                            Select(g => new WipCommesse()
                            {
                                IdTipologia = g.Key.IdTipologia,
                                NumCommessa = g.Key.NumCommessa,
                                TotQtaLetta = g.Sum(i => i.QtaLanciabile)
                            }));
Run Code Online (Sandbox Code Playgroud)

这假设您在 WipCommesseList 中有以下构造函数:

public class WipCommesseList : List<WipCommesse>
{
    public WipCommesseList() : base()
    {

    }

    public WipCommesseList(int capacity) : base(capacity)
    {

    }

    public WipCommesseList(IEnumerable<WipCommesse> collection) : base(collection)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

这允许您通过创建新的 WipCommesseList 对象将基于 WipCommesse 的任何可枚举类型转换为 WipCommesseList。