이 질문에는 이미 답변이 있습니다.
다음과 같이 여러 행의 데이터가 포함 된 데이터 집합이있는 데이터베이스 테이블이 있습니다.
ItemId Code StatusId
-------------------- ---------------------------------------------
62224 NC0860000 8
62225 NC0860000 8
62226 NC0860000 8
62227 NC0860200 5
62228 NC0860000 5
62229 NC0860000 5
62230 NC0860000 5
내가 성취하고자하는 것은 출력 결과입니다.
NC0860000 8 3 (code, status, count)
NC0860000 5 3
그룹화가 EF에서 어떻게 작동하는지 완전히 이해하지 못합니다. 쿼리를 사용하여 키와 단일 그룹의 수를 구할 수 있습니다.
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();
그러나 코드별로 그룹화 한 다음 StatusId로 그룹화하는 방법을 파악한 다음 상태별로 총 행 수를 계산합니다.
이 작업을 수행하는 방법이나 쿼리에서 내가 잘못하고있는 작업을 찾는 위치에 대한 제안을 보내 주시면 감사하겠습니다.
미리 감사드립니다.
-건배
다음과 같이 새로운 anon 클래스로 그룹화 할 수 있습니다.
// 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();
데이터를 제공하면 다음과 같이 출력됩니다.
AgencyCode Status Count
NC0860000 8 3
NC0860200 5 1
NC0860000 5 3
"NC0860200"은 오류라고 추측합니다. 그러나 샘플 데이터에 포함되어 있으므로 포함 시켰습니다.