1

これが可能かどうかはわかりません。私のクラスのリストは次のようになります。

class Person
{
 string Firstname
 string Lastname
 DateTime Timestamp
}

ここで、 FirstnameLastnameでグループを作成したいと思います。

  • ジョン・ディア、3:12
  • ジョン・ディア、6:34
  • ジョン・ディア、11:12
  • トム・キン、1:12
  • トム・キン、3:49
  • トム・キン、4:22
  • マーカス・フェルト、11:23

さらに、このグループをTimestampで並べ替えたいと思います。グループをlistViewに表示するために、最後を最初にする必要があります。

  • Markus Fert (グループ ヘッダー)
    11:23 (コンテンツ要素)

  • ジョン・ディア
    11:12
    6:34

  • トム・キン
    4:22
    3:49

  • ジョン・ディア
    3:12

  • トム・キン
    1:22

Linqの天才が問題の解決に役立つことを願っています:)ありがとう!!


セルゲイのおかげで、魅力的に働きました!

さらに、グループ キーのカスタム クラスを作成して、ListView ヘッダーにさまざまな追加情報を表示したいと考えています。(つなぎ合わせた紐だけではありません)

次のように、クエリを IEnumerable に割り当てたいと思います。

IEnumerable<IGrouping<Header, Person>> PersonGroups 

ヘッダーには、各 Person に含まれるその他のプロパティが含まれています (たとえば、各 Person には Country、Age などもあります)。多分あなたもそこに私を助けることができますか?


セルゲイに感謝します。ICompareable インターフェイスを実装する Header クラスを実装することで問題を解決しました。

IEnumerable<IGrouping<Header, Person>> PersonGroups

 public class Header: IComparable<Header>
 {
     public Header(string firstname, string lastname)
     {
        Firstname= firstname;
        Lastname = lastname;
     }

     public string Firstname{ get; set; }
     public string Lastname{ get; set; }

     public int CompareTo(Header that)
     {
       if (this.Firstname == that.Firstname&& this.Lastname == that.Lastname)
          return 0;
       else
           return -1;
     }
  }

私のクエリは次のようになります。

PersonGroups= persons.OrderByDescending(p => p.Timestamp)
                .GroupConsecutive(p => new Header(p.Firstname, p.Lastname));
4

2 に答える 2