Tengo 3 "BOMrow", que se agregan a "itemBOMList". Cada "BOMrow" es una clase, ParentChildPair. Luego haga groupby en "itemBOMList", teniendo "result". Finalmente quiero agregar el "resultado" a la lista maestra, "BOMList". Sin embargo, un error muestra " no se puede convertir de 'System.Collections.Generic.List << tipo anónimo: cadena Child, bool IsReferencePart, string Parent, int Cantidad >>' a 'addToList.ParentChildPair' "

Intenté agregar .Cast () antes de ToList (), pero esto tampoco funciona, mostrando " no se puede convertir de 'System.Collections.Generic.List ' a 'addToList.ParentChildPair ' ". Por favor ayuda.

class ParentChildPair
    {
        public string Parent { get; set; }
        public string Child { get; set; }
        public int Quantity { get; set; }
        public bool IsReferencePart { get; set; }
    }


    

 class Program
    {
        static void Main(string[] args)
    {
        List<ParentChildPair> itemBOMList;
        itemBOMList = new List<ParentChildPair>();

        List<ParentChildPair> BOMList;
        BOMList = new List<ParentChildPair>();

        List<ParentChildPair> newresult;

        //List<ParentChildPair> convertedResult;
        //convertedResult = new List<ParentChildPair>();

        ParentChildPair BOMrow = new ParentChildPair();

        BOMrow.Parent = "parent1";
        BOMrow.Child = "child1";
        BOMrow.Quantity = 1;
        BOMrow.IsReferencePart = false;
        itemBOMList.Add(BOMrow);

        BOMrow = new ParentChildPair();
        //BOMrow = null;

        BOMrow.Parent = "parent1";
        BOMrow.Child = "child2";
        BOMrow.Quantity = 1;
        BOMrow.IsReferencePart = false;
        itemBOMList.Add(BOMrow);

        BOMrow = new ParentChildPair();

        BOMrow.Parent = "parent1";
        BOMrow.Child = "child2";
        BOMrow.Quantity = 2;
        BOMrow.IsReferencePart = false;
        itemBOMList.Add(BOMrow);

        var result = itemBOMList.GroupBy(d => d.Child)
.Select(
    g => new
    {
        Child = g.Key,
        IsReferencePart = g.First().IsReferencePart,
        Parent = g.First().Parent,
        Quantity = g.Sum(s => s.Quantity)
    }).ToList();

        BOMList.Add(result);

    }
}
-1
user987654 24 nov. 2021 a las 11:28
1
g => new -> g => new ParentChildPair. Además, no puede agregar una lista a una lista con .Add, debe usar .AddRange
 – 
Camilo Terevinto
24 nov. 2021 a las 11:30

1 respuesta

La mejor respuesta

Su consulta de linq devuelve IEnumerable de objetos anónimos. Necesitas crear una instancia de ParentChildPair. Luego puede agregarlo a la lista, pero necesita usar el método AddRange porque el resultado de su consulta será IEnumerable.

var result = itemBOMList.GroupBy(d => d.Child)
.Select(
    g => new ParentChildPair
    {
        Child = g.Key,
        IsReferencePart = g.First().IsReferencePart,
        Parent = g.First().Parent,
        Quantity = g.Sum(s => s.Quantity)
    }).ToList();

    BOMList.AddRange(result);
0
puko 24 nov. 2021 a las 11:36