2010-07-09 2 views
1

에 의해 그룹의 외부는 다음과 같습니다Linq에 그룹화 -로 작동 골재, 나는 SQL 쿼리를 가지고

SELECT TOP 100 
    Max(Table_ID) as Max_ID, 
Col1, 
Col2, 
Col3, 
COUNT(*) AS Occurences 
FROM myTable 
GROUP BY Col1, Col2, Col3 
ORDER BY Occurences DESC 

가 어떻게 동일한 LINQ 쿼리를 작성할 수 있습니다?

내 그룹핑을 적용하자마자 그룹화되지 않은 열 내 테이블에 액세스 할 수없는 경우가 있습니다. 내 경우에는입니다.

var errors = from r in MyTable 
    group e by new {e.Col1, e.Col2} into g 
    orderby g.Count() descending 
    select new {MaxId = ???, Count = g.Count(), g.Key.Col1, g.Key.Col2}; 

답변

4

사용 g.Max(x => x.TableID) :

var errors = from r in MyTable 
    group e by new {e.Col1, e.Col2} into g 
    orderby g.Count() descending 
    select new {MaxId = g.Max(x => x.TableID), 
       Count = g.Count(), g.Key.Col1, g.Key.Col2}; 

(당신은 물론, 각 그룹 내에서 최대 값을 원하는 가정.)

+0

아, 환호의 친구. 나는 원래 그것을 시도했지만 intelisense는 나에게 밖으로 spazzed, 그래서 내가 뭘 잘못했다고 생각. 건배! –

1
존의 대답은 좋은

가, 난 그냥 이유에 대해 조금 자세히 설명 할 :

문제는 그룹화를 적용하자마자 그룹화되지 않은 열에 액세스 할 수 없다는 것입니다.

r 범위를 벗어났습니다 ... 왜 그런가요?

쿼리를 끝내는 두 가지 방법은 select 또는 group by 절입니다. 쿼리 계속 절 into ggroup by에 추가하면 쿼리의 최상위 요소는 g이고이 시점까지 쿼리에 도입 된 모든 변수는 범위에서 제거됩니다.

스플 라이스this msdn article으로 검색하면 샘플을 볼 수 있습니다.

into의 사용을 쿼리 계속이 아닌 그룹 가입 인 join on equals into과 혼동하지 마십시오. 그룹 조인은 범위에서 이전 변수를 제거하지 않습니다.

관련 문제