una sumar lista con agrupar linq entity-framework linq-to-sql

sumar - cómo agrupar por múltiples columnas usando linq



agrupar una lista con linq c# (1)

Esta pregunta ya tiene una respuesta aquí:

Tengo una tabla de base de datos con un conjunto de datos que contiene varias filas de datos de la siguiente manera

ItemId Code StatusId -------------------- --------------------------------------------- 62224 NC0860000 8 62225 NC0860000 8 62226 NC0860000 8 62227 NC0860200 5 62228 NC0860000 5 62229 NC0860000 5 62230 NC0860000 5

Lo que me gustaría lograr es un resultado de salida como

NC0860000 8 3 (code, status, count) NC0860000 5 3

No entiendo completamente cómo funciona la agrupación en EF. Puedo obtener la clave y un conteo de un solo grupo usando una consulta como:

var results = (from ssi in ctx.StageSubmitItems join s in ctx.StageSubmissions on ssi.SubmissionId equals s.SubmissionId where s.ContributorCode == contributorId group ssi.SubmitItemId by ssi.AgencyCode into g select new {AgencyCode = g.Key, Count = g.Count() }).ToList();

Pero no puedo averiguar cómo agrupar por código y luego por StatusId y luego generar un conteo del número total de filas por estado.

Agradecería cualquier sugerencia sobre dónde buscar cómo lograr esto o lo que estoy haciendo incorrectamente en la consulta.

Gracias por adelantado

-Aclamaciones


Puede agrupar por una nueva clase anon de la siguiente manera:

// I created a Foo class to show this working var fooList = new List<Foo> { new Foo { ItemId = 62224, Code = "NC0860000", StatusId = 8 }, new Foo { ItemId = 62225, Code = "NC0860000", StatusId = 8 }, new Foo { ItemId = 62226, Code = "NC0860000", StatusId = 8 }, new Foo { ItemId = 62227, Code = "NC0860200", StatusId = 5 }, new Foo { ItemId = 62228, Code = "NC0860000", StatusId = 5 }, new Foo { ItemId = 62229, Code = "NC0860000", StatusId = 5 }, new Foo { ItemId = 62230, Code = "NC0860000", StatusId = 5 }, }; var results = (from ssi in fooList // here I choose each field I want to group by group ssi by new { ssi.Code, ssi.StatusId } into g select new { AgencyCode = g.Key.Code, Status = g.Key.StatusId, Count = g.Count() } ).ToList(); // LINQPad output command results.Dump();

Con los datos proporcionados, aquí está el resultado:

AgencyCode Status Count NC0860000 8 3 NC0860200 5 1 NC0860000 5 3

Supongo que "NC0860200" es un error, pero está en los datos de muestra, así que lo incluí.