これが可能かどうかはわかりません。私のクラスのリストは次のようになります。
class Person
{
string Firstname
string Lastname
DateTime Timestamp
}
ここで、 FirstnameとLastnameでグループを作成したいと思います。
- ジョン・ディア、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));