Pregunta

Estoy usando C # en Framework 3.5. Busco a grupo rápidamente una lista genérica <> por dos propiedades. Por el bien de este ejemplo digamos que tienen una lista de un tipo de orden con propiedades de CustomerId, ProductId y ProductCount. ¿Cómo puedo obtener la suma de ProductCounts agrupados por CustomerId y ProductID usando una expresión lambda?

¿Fue útil?

Solución

var sums = Orders.GroupBy(x => new { x.CustomerID, x.ProductID })
                 .Select(group => group.Sum(x => x.ProductCount));

Otros consejos

Me doy cuenta de este hilo es muy antiguo, pero ya que acabo luchado a través de esta sintaxis que pensé que había puesto mis hallazgos adicionales - se puede devolver la suma y las identificaciones (w / o foreach) en una consulta de este modo:

var sums = Orders
            .GroupBy(x => new { x.CustomerID, x.ProductID })
            .Select(group =>new {group.Key, ProductCount = group.Sum(x => x.ProductCount)});

La parte difícil para mí para conseguir que funcione es que la suma debe tener un alias, al parecer ...

Por otra parte, si desea obtener los identificadores de cada suma, se podría hacer esto

var customerAndProductGroups =
    from order in Orders
    orderby order.CustomerID, order.ProductID // orderby not necessary, but neater
    group order by new { order.CustomerID, order.ProductID };

foreach (var customerAndProductGroup in customerAndProductGroups)
{
    Console.WriteLine("Customer {0} has ordered product {1} for a total count of {2}",
        customerAndProductGroup.Key.CustomerID,
        customerAndProductGroup.Key.ProductID,
        customerAndProductGroup.Sum(item => item.ProductCount));
}

var New1 = EmpList.GroupBy (z => z.Age) .OrderBy (Empleado => Employee.Key);

dataGridView1.DataSource = New1;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top