2011-08-16 3 views
0

열 AppleType, CreationDate가 있고 CreationDate에 의해 각 AppleType 그룹을 주문한다고 가정 해보십시오. 또한 AppleType 당 CreationDate의 순서를 명시 적으로 지정하는 새 열을 만들려고합니다.LINQ에서 orderby 이후 그룹당 행 번호 지정

따라서 결과 데이터 집합에는 AppleType, CreationDate, OrderIntroduced의 세 열이 있습니다.

이 작업을 수행하는 LINQ 방법이 있습니까? 프로그래밍 방식으로 데이터를 처리해야하지만 (LINQ가 아닌) 배열을 만들고 열을 변환 한 다음 DataSet에 추가해야합니까? 나는 이것을하기위한 LINQ 방법이있다. 가능한 경우 LINQ 비 메소드 구문을 사용하십시오.

답변

3

실제로 올바른 순서로 값이 표시됩니까?

var queryWithIndex = queryWithoutIndex.Select((x, index) => new 
               { 
                x.AppleType, 
                x.CreationDate, 
                OrderIntroduced = index + 1, 
               }); 

(즉, 당신이 1에서 시작 OrderIntroduced을 원하는 가정 것) : 쿼리 식 구문이 관련 과부하를 지원하지 않기 때문에, 메서드 구문을 사용해야하지만 당신은을 - 그렇다면, 그것은 쉽게

나는 어떻게 그걸 다시 DataSet에 집어 넣을지 모르겠다.하지만 정말로 이 필요하다. 강하게 타이핑 된 시퀀스와 반대로 DataSet이 필요하다.

편집 : 좋아, 요구 사항은 아직 불분명하지만, 난 당신이 같은 것을 원하는 생각 :

var query = dataSource.GroupBy(x => x.AppleType) 
    .SelectMany(g => g.OrderBy(x => x.CreationDate) 
         .Select((x, index) => new { 
           x.AppleType, 
           x.CreationDate, 
           OrderIntroduced = index + 1 })); 

참고 :의 GroupBySelectMany 여기 전화 쿼리 식 구문에 넣어 될 수 있지만, 이 경우 더 지저분해질 것이라고 생각합니다. 두 가지 형식 모두에 대해 편안 할 가치가 있습니다. 당신이 엔티티/SQL 솔루션으로 순수한 Linq를 원하는 경우

+0

좋아 보인다,하지만 난 단순히 인덱스를 각각 싶지 않아 행에서 ApplyType과 CreationDate를 기준으로 각 행을 인덱싱하려고합니다. 즉, 각각의 새로운 AppleType은 인덱스 1에서 시작될 것입니다. –

+0

@Ben : 그래서'AppleType'으로 그룹화 한 후, 평평하게하기 전에 추가하십시오. 샘플 쿼리를 제공하지 않았을 때 원하는 것을 정확히 추측하기는 매우 어렵습니다. 그러나 그 결과를 알려 드리겠습니다. –

+0

작동. 감사! 쿼리 구문에서 Aggregate를 사용하는 것은 어떻습니까? –

1

당신은 이런 식으로 뭔가를 할 수 있습니다

은 중복 처리하기 위해 수정에서 CreationDate의

var query = from a in context.AppleGroup 
      orderby a.CreationDate 
      select new 
      { 
       AppleType = a.AppleType, 
       CreationDate = a.CreationDate, 
       OrderIntroduced = (from b in context.AppleGroup 
           where b.CreationDate < a.CreationDate 
           select b).Count() + 1 
      }; 
+0

Count가 색인이 아닙니다. 이게 내가 필요한 것을 정말로 할 수 있을까? –

+0

@Ben B - 중복 된 CreationDates를 처리 할 수있는 답변을 업데이트했습니다. 본질적으로 색인 인 모든 레코드를 계산하기 때문에 작동합니다. – Aducci