2012-06-15 2 views
1

ThenBy 순서를 유지하는 식을 어떻게 작성합니까? 아래 식은 Bowler.Number에 의해 정렬 된 그룹을 생성하지만 각 그룹의 일치는 정렬되지 않습니다.GroupBy가 ThenBy 정렬 순서를 잃습니다

1 
    game1 295 
    game2 199 
    game3 202 
    game4 178 
2 
    game1 177 
    ... 

현재 내가 두 foreach는

foreach (var item in TheGroups){ 
    ... do some stuff with the Group 
    foreach (var x in item.OrderBy(a =>a.Number)) { //<-- can I get rid of this OrderBy? 
    ... do some stuff with the Matches in this group 
    } 
} 

별거

처럼, 난 그냥 LINQ는 나를을 정렬 할 수 있도록 수있을 것이라고 생각 사용 : 여기
public class Match 
{ 
    public int Id { get; set; } 
    public virtual Bowler Bowler { get; set; } 
    public byte GameNumber { get; set; } 
    public int Score { get; set; } 
    ... 
} 

public class Bowler 
{ 
    public int Id { get; set; } 
    public int Number { get; set;} 
    ... 
} 

var GroupedMatches = db.Matches.OrderBy(m=>m.Bowler.Number).ThenBy(m=>m.GameNumber).GroupBy(m => m.Bowler.Number) 

출력이 내가 원하는입니다 그룹이 일치 할 때 그룹에서 일치합니다. 나중에 처리 할 때가 아닙니다.

+1

'GameNumber'에 대한 염려없이 그룹화를 할 수 있습니다. – Joe

답변

1

게임 번호로 중산모 번호를 입력 한 그룹 목록을 주문하는 것이 비관적이기 때문에 출력을 원하는지 잘 모르겠습니다.

당신이 중산 숫자의 정렬 된 목록을 원하는 가정하면, 게임의 정렬 된 목록을 포함하는 각,이 같은 일이

여기
var GroupedMatches = db.Matches 
    .GroupBy(m => m.Bowler.Number) 
    .OrderBy(g => g.Key) 
    .Select (g => new 
      { 
       BowlerNumber = g.Key, 
       Matches = g.OrderBy(m => m.GameNumber).ToList() 
      }); 

당신이 얼마나 구체적이다 작동 할 수 있습니다 당신이

foreach(var group in GroupedMatches) { 
    Console.WriteLine(group.BowlerNumber); 
    foreach(var match in group.Matches) { 
     Console.WriteLine("game{0} {1}", match.GameNumber, match.Score); 
    } 
} 
찾고있는 출력
+0

결과를 'foreach'하려고하면 두 개의 컴파일러 오류가 발생합니다. 'AnonymousType # 1'에 'GetEnumerator'에 대한 공용 정의가 포함되어 있지 않으므로 foreach 문은 'AnonymousType # 1'유형의 변수에서 작동 할 수 없음 \t 및 \t 'AnonymousType # 1'에는 'Key'및 확장 메서드에 대한 정의가 없습니다. 'Key'는 'AnonymousType # 1'타입의 첫 번째 인수를 받아들입니다. – Pablo

+0

각 그룹에 대해 'foreach'를 원하면'group.Matches'를 foreach하십시오. – recursive

+0

그룹과 일치 모두를 foreach해야합니다. 나는 내 질문을 내가 원하는 결과물로 편집했고, 지금 그것을 얻기 위해 무엇을 했는가? – Pablo

관련 문제