2009-05-01 4 views
4

저는 LINQ를 배우기 위해 최선을 다하고 있지만 여전히 어려운 시간을 보내고 있습니다. 이와 같이 데이터 집합이나 List가 있다고 가정하고 컬렉션 객체의 이름 또는 필드가 열 이름이라고 가정합니다.Noob은 linq에서 동일한 값을 가진 각 레코드의 첫 번째 레코드를 선택합니다.

Id | 날짜 | 월 | 화 | 수 | 목 | 금 | 토 | 일요일 | 카운트

1 | 01/05 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 < - (1)

2 | 02/02 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 ** | - (2)

3 | 03/02 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 ** | - (2)

4 | 04/06 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 < - (1)

5 | 05/04 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = | = | 7 ** | - (3)

6 | 06/01 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = | == 7 ** | - (3)

7 | 07/06 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 < ---- (1)

8 | 08/03 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | ** 4 ** - - (4)

9 | 09/07 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | ** 4 ** - - (4)

10 | 10/05 | 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

내가 원하는 건 모든 번호를 먼저 (1)의 후 (2) 왜냐하면 그들은 첫 번째 (1)에 속하기 때문입니다. 다음 (3)의 그룹은 두 번째 그룹에 속하기 때문에 (1). (4)의 그룹은 마지막 그룹 (1)에 속하기 때문에 마지막 그룹입니다.

도와주세요.

- 문구를 다시 말하십시오. 1. 어떻게 5의 첫 번째 그룹을 얻은 다음 7의 그룹을 얻고 4의 그룹을 마지막으로 얻을 수 있습니까?

+0

할 방법 (1)의 (2) '부여 s (sic)는 첫 번째 (1)에 속합니다. 나는이 질문에 대해별로 감각이 없다. – spender

+0

질문이 명확하지 않습니다. 하나의 행 세트가 다른 행 세트에 속하도록 데이터가 어떻게 구성되는지 설명하십시오. –

+0

@spender and joe, 불명확 한 질문에 사과드립니다. 나는 단지 그것을 바꿔 썼다. 어쨌든, 나는 단지 5, 7 및 4 인 세 그룹을 얻고 싶습니다. – grayman

답변

5

수량을 기준으로 주문하려는 것으로 보입니다.

"5의 첫 번째 그룹을 얻으십시오"라고하면 무엇을 의미합니까? 어떤 데이터를 가져 오시겠습니까?

UPDATE

public class Row 
{ 
    public int ID{get;set;} 
    public string Date{get;set;} 
    public int Count{get;set;} 
} 

Row r1 = new Row{ID=1, Date="01/01/01", Count=5}; 
Row r2 = new Row{ID=2, Date="01/02/01", Count=5}; 
Row r3 = new Row{ID=3, Date="01/03/01", Count=5}; 
Row r4 = new Row{ID=4, Date="01/04/01", Count=7}; 
Row r5 = new Row{ID=5, Date="01/05/01", Count=7}; 
Row r6 = new Row{ID=6, Date="01/06/01", Count=7}; 
Row r7 = new Row{ID=7, Date="01/07/01", Count=4}; 
Row r8 = new Row{ID=8, Date="01/08/01", Count=4}; 
Row r9 = new Row{ID=9, Date="01/09/01", Count=4}; 
Row r10 = new Row{ID=10, Date="01/01/01", Count=4}; 

List<Row> rows = new List<Row>{r1,r2,r3,r4,r5,r6,r7,r8,r9,r10}; 

을 가정하고 설명

후 다음

// We will assign results of our query to this variable 
var result = 

// rows is a generic list of Row objects 
rows     

    // This splits the list into seperate categories organised by Count 
    // After the GroupBy, we have an IEnumerable<IGrouping<Int32, Row>> - that is, a collection of collections of items sharing a common key (in this case Count) 
    .GroupBy(r=>r.Count) // r is of type Row 

    // Now we are simply selecting the first item of each subgroup. 
    .Select(g=>g.First()) // g is IGrouping<Int32,Row>, g.First() is of type Row 
    ; 

ID Date  Count 
    1 01/01/01 5 
    4 01/04/01 7 
    7 01/07/01 4 
+0

@joe, 전체 행 (해당 데이터 세트 인 경우). – grayman

+0

또는 전체 개체가 목록의 구성원 인 경우 grayman

+0

미안하지만 여전히 이해할 수 없습니다. 동일한 개수의 행이 여러 개 있기 때문에 전체 행은 무엇을 의미합니까? 기대하는 결과의 예를 추가 할 수 있습니까? –