OrderBy で使用したいカスタム比較子があります。この比較機能により、ネストされたリストを希望どおりに並べ替えることができます。私は別の場所で完璧に動作しますが、Linq で思い通りに動作させることはできません。どこが間違っているか教えてもらえますか?
編集:私がそれを機能させたい方法は、最初にエンティティをクラスごとにグループ化し(BaseDirectory> BaseSite> VideoEntity、常に)、次にアルファベット順に並べ替えます(昇順= A-> Z、または降順Z-> A)。とにかく、SortDirectoriesDescending() を使用すると、昇順で並べ替えられたコレクションが返されます。デフォルトでは、コレクションは昇順モードでソートされます (したがって、コンバーターは機能し、降順でもテストしました)。
public class VideoEntityComparer : IComparer<VideoEntity>
{
int order = 1;
public VideoEntityComparer(Boolean ascending)
{
if (!ascending)
{
this.order = -1; // so descending
}
}
public VideoEntityComparer()
{
}
public int Compare(VideoEntity x, VideoEntity y)
{
if ((x is BaseDirectory && y is BaseDirectory) || (x is BaseSite && y is BaseSite) || (x is VideoEncoder && y is VideoEncoder))
{
return string.Compare(x.Nom, y.Nom, false) * order; // only objects of the same type are sorted alphabetically
}
else if ((x is BaseDirectory && y is BaseSite) || (x is BaseSite && y is VideoEncoder))
{
return -1;
}else
{
return 1;
}
}
}
private void SortDirectoriesDescending(object sender, RoutedEventArgs e)
{
ObservableCollection<BaseDirectory> tempDir = new ObservableCollection<BaseDirectory>(
Directories.OrderBy(directory => directory, new VideoEntityComparer(false)));
Directories = tempDir;
}