J'ai une table de base de données avec un ensemble de données qui contient plusieurs lignes de données comme suit
ItemId Code StatusId
-------------------- ---------------------------------------------
62224 NC0860000 8
62225 NC0860000 8
62226 NC0860000 8
62227 NC0860200 5
62228 NC0860000 5
62229 NC0860000 5
62230 NC0860000 5
Ce que je voudrais accomplir, c'est un résultat de sortie
NC0860000 8 3 (code, status, count)
NC0860000 5 3
Je ne comprends pas bien comment fonctionne le regroupement dans EF. Je peux obtenir la clé et le nombre d'un seul groupe en utilisant une requête comme:
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();
Mais je ne peux pas comprendre comment grouper par code, puis par StatusId, puis produire un décompte du nombre total de lignes par statut.
J'apprécierais toutes les suggestions sur où chercher comment accomplir cela ou ce que je fais incorrectement dans la requête.
Vous pouvez regrouper par une nouvelle classe anon comme suit:
// 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();
Avec les données fournies, voici la sortie:
AgencyCode Status Count
NC0860000 8 3
NC0860200 5 1
NC0860000 5 3
Je suppose que "NC0860200" est une erreur, mais il se trouve dans vos exemples de données, donc je l'ai inclus.