163

次の記録を考慮します。

   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を使用してこれを行うにはどうすればよいですか?

4

7 に答える 7

14

@Alireza の awnser は完全に正しいですが、このコードを使用するときに注意する必要があります。

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
于 2016-10-08T11:57:50.807 に答える
2
var res = (from element in list)
      .OrderBy(x => x.F2).AsEnumerable()
      .GroupBy(x => x.F1)
      .Select()

OrderBy() の後に .AsEnumerable() を使用する

于 2021-01-03T14:16:51.853 に答える