2013-07-03 2 views
15

내가 가진,멀티 그룹 열 필드 객체 Linq에

목록, MyList을 개수 :

string A; 
string B; 

는 개념적으로,이 열 A, B에있는 2 열 SQL 테이블과 유사

나는 그런 개념 테이블에이 T-SQL의 세 열 결과 집합을 생성 할 것 LINQ 표현 만들려고 해요 :

SELECT A, B, COUNT(B) 
FROM T1 
GROUP BY A, B 
,536을 내가 같은 테이블이 있다면

즉, :

A  B 
---------- 
x  g 
x  g 
x  g 
x  s 
y  g 
y  g 

내가 기대 :

A  B  COUNT(B) 
------------------------- 
x  g   3 
x  s   1 
y  g   2 

내 최선의 노력이 있었다 :

var result = from MyObjs in MyList 
group MyObjs by new { MyObjs.A, MyObjs.B } into g 
select new { g.Key.A, g.Key.B, g.Key.B.Count() } 

를하지만 횟수가 나타납니다 다중 컬럼 그룹당 B 수가 아닌 B의 전체 수를 리턴하십시오. 이 문제를 어떻게 해결할 수 있습니까? 당신이 원하는 경우

+0

주목해야 할 중요한 일이 것은 정말 아니라는 것이다 (내 머리 위로 떨어져) ....

var result = from MyObjs in MyList group MyObjs by new { MyObjs.A, MyObjs.B } into g select new { g.Key.A, g.Key.B, MyCount = g.Count() } 

을이 시도하거나 B를 세는 것, 당신은 단지 세고있다. (예를 들어, SQL의'count (1)'도 똑같이 작동 할 것이다.) 이것이 당신의 대답이 직관적으로 작동하지 않는 이유입니다. NinjaNye는 해결책을 가지고있다. :) – Chris

답변

36

var result = MyList.GroupBy(x => new {x.A, x.B}) 
        .Select(g => new {g.Key.A, g.Key.B, MyCount = g.Count()}); 
+2

원리는 정확하지만 구문은 마지막 줄에서 약간 벗어났습니다. '일 새로운 선택해야 {개수, A = g.Key.A, B = g.Key.B을 g.Count =()는 '} –

+1

만 계산 값 (예를 들면 개수) 지명해야한다. 이름 지정 A 및 B는 선택 사항입니다. –