我有一個自定義比較器,我想使用OrderBy。這個比較器可以按我想要的方式對嵌套列表進行排序。我完全在其他地方工作,但我無法按照我想要的方式使用Linq。你能告訴我我錯了嗎?IComparer,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;
}
定義「你想要的方式」。這是我想的答案的關鍵。在執行比較器或將其插入'OrderBy'方法中是否存在問題?對'OrderBy'的調用看起來是正確的。 – 2012-07-27 08:02:07
我剛剛在編輯中定義了「我想要的方式」;) – Sheamus 2012-07-27 08:58:40
由於您的SortDirectoriesDescending方法正在使用新的已排序集合替換目錄集合,而不是就地排序,因此如果已採用「目錄」在調用排序方法之前,您將看不到新的排序順序。您可能需要提供更多的代碼(特別是任何使用「目錄」的代碼和調用SortDirectoriesDescending的代碼部分)來確定問題,因爲實際情況是一切都很正常。 – Iridium 2012-07-27 10:44:58