[C#] Linq를 사용하여 각 그룹에서 첫 번째 레코드를 얻는 방법

다음 기록을 고려하십시오.

   Id          F1            F2             F3
 -------------------------------------------------
   1           Nima          1990           10
   2           Nima          1990           11
   3           Nima          2000           12
   4           John          2001           1
   5           John          2002           2
   6           Sara          2010           4

F1필드 를 기준으로 그룹화 하고 정렬 Id하여 다음 레코드와 비슷한 그룹의 첫 번째 레코드에서 모든 필드를 가져옵니다.

   Id          F1            F2             F3
 -------------------------------------------------
   1           Nima          1990           10
   4           John          2001           1
   6           Sara          2010           4

linq를 사용하여 어떻게 할 수 있습니까?



답변

    var res = from element in list
              group element by element.F1
                  into groups
                  select groups.OrderBy(p => p.F2).First();


답변

var result = input.GroupBy(x=>x.F1,(key,g)=>g.OrderBy(e=>e.F2).First());


답변

@Alireza의 천막은 완전히 정확하지만이 코드를 사용할 때주의해야합니다

var res = from element in list
          group element by element.F1
              into groups
              select groups.OrderBy(p => p.F2).First();

목록을 주문한 다음 그룹화를 수행하여 그룹의 첫 번째 행을 가져 오기 때문에이 코드와 유사합니다.

var res = (from element in list)
          .OrderBy(x => x.F2)
          .GroupBy(x => x.F1)
          .Select()

이제 동일한 그룹화 결과를 얻는 것과 같이 더 복잡한 것을 원하지만 F2의 첫 번째 요소와 F3의 마지막 요소 또는 더 많은 사용자 정의를 취하는 경우 코드를 스터드하여 수행 할 수 있습니다

 var res = (from element in list)
          .GroupBy(x => x.F1)
          .Select(y => new
           {
             F1 = y.FirstOrDefault().F1;
             F2 = y.First().F2;
             F3 = y.Last().F3;
           });

그래서 당신은 같은 것을 얻을 것입니다

   F1            F2             F3
 -----------------------------------
   Nima          1990           12
   John          2001           2
   Sara          2010           4


답변

원하는 것을 달성하기 위해 그것을 사용하십시오. 그런 다음 반환 할 속성을 결정하십시오.

yourList.OrderBy(l => l.Id).GroupBy(l => new { GroupName = l.F1}).Select(r => r.Key.GroupName)


답변