13

이 질문에는 이미 답변이 있습니다.

다음과 같이 여러 행의 데이터가 포함 된 데이터 집합이있는 데이터베이스 테이블이 있습니다.

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로 그룹화하는 방법을 파악한 다음 상태별로 총 행 수를 계산합니다.

이 작업을 수행하는 방법이나 쿼리에서 내가 잘못하고있는 작업을 찾는 위치에 대한 제안을 보내 주시면 감사하겠습니다.

미리 감사드립니다.

-건배

1 답변


31

다음과 같이 새로운 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"은 오류라고 추측합니다. 그러나 샘플 데이터에 포함되어 있으므로 포함 시켰습니다.

연결된 질문


관련된 질문

최근 질문