2012-01-27 2 views
0

내가 ID 목록을 받아 다음 쿼리를 가지고 있고이 수를하고 싶어. 또한 int로 정의 된 각 속성이 포함 된 개수를 보유하는 개체 모델 인 CountModel이 있습니다.그룹화에 계산 LINQ - 투 - SQL

public class GetCountByStatus(List<int> TheIDs) 
{ 
...using MyDC... 
var CountData = (from d in MyDC.Data 
        where TheIDs.Contains(d.ID) 
        group d by d.Status into statusgroup 
        select new CountModel() 
        { 
        CountStatus1 = (from g in statusgroup 
            where g.Status == 1 
            select g).Count(), 

        CountStatus2 = (from g in statusgroup 
            where g.Status == 2 
            select g).Count(), 

        CountStatusN = .... 

        }).Single(); 

예를 들어 상태 N 인 요소가 없으면이 코드가 충돌하거나 CountStatusN이 0이됩니까? 이걸 내가 원하는대로 할 수있는 가장 좋은 방법인가?

감사합니다.

답변

1

Count()은 항상 주어진 상태의 요소가없는 경우 0 인 정수를 반환합니다. 따라서 CountStatusN은 항상 정수가됩니다. 내가 내 자신을 시도하지와 VS의 코드를 작성하지 않은

var countData = MyDC.Data.Where(y => TheIDs.Contains(y.ID)) 
    .GroupBy(y => y.Status).ToDictionary(y => y.Key, y => y.Count()); 

,하지만 난 그게 당신이 할 수있는 어떻게 거의 생각 : 내가 대신 사전에 갈 같은 것을 시도 할 것이다

2

해. 그러면 키가 상태이고 값이 해당 상태의 수인 사전이 제공됩니다. SomethingX 명명 된 속성을 가진 모델을 정의

매우 유연하지 않습니다. 즉, 새로운 상태가되면 모델을 변경해야합니다. 데이터를 사전에 보관하면 대신 저장하지 않아도됩니다.