簡體   English   中英

無法按C#中的Tag.AlbumArtists排序

[英]Not able to sort by Tag.AlbumArtists in c#

我正在嘗試按藝術家然后按專輯對一組mp3文件進行排序。 在此過程中,我遇到了兩個問題: 一種有效,一種無效。 我的印象是,要完成這兩種工作,我要做的就是一個接一個地使用它們,但是我不能這樣做,因為其中之一不起作用。 請參閱下面的代碼:

foreach (string file in files)
{
    TagLib.File fi = TagLib.File.Create(file);
    listOfFiles.Add(fi);
}
List<TagLib.File> sortedByBand = listOfFiles.OrderBy(o =>
o.Tag.AlbumArtists).ToList();
List<TagLib.File> sortedBy = listOfFiles.OrderBy(o => 
o.Tag.AlbumArtists).ToList();

列表“ sortedByBand”及其附帶的sort導致以下消息:附加信息:至少一個對象必須實現IComparable。 在此先感謝您提供的所有幫助。

看起來AlbumArtists是某種枚舉(如字符串數組),無法與其他實例進行比較,因此listOfFiles不能由此排序。

在這種情況下,您必須將AlbumArtists轉換為可以與其他實例進行比較的對象。 例如,一個字符串:

List<TagLib.File> sortedByBand = listOfFiles.OrderBy(o =>
String.Join(";", o.Tag.AlbumArtists)).ToList();

當然,這假設具有藝術家{"Pink Floyd", "U2"}的MP3將 {"U2", "Pink Floyd"}的MP3 之前出現。 為避免這種情況,在轉換成單個字符串之前,您需要對藝術家列表本身進行排序。 希望這可以幫助!

我認為您的方法可能無法得出正確的結果,您不應該進行雙重排序,我的LINQ提供了擴展然后進行排序,因為您使用字符串數組作為排序元素,但您會收到該錯誤,我不確定是否可能,但根據其他建議,您可以嘗試

///  sort the array inside the tag.

    listOfFiles.ForEach(x =>Array.Sort(o.Tag.AlbumArtists));
///if this does not work try other suggestion 
    List<TagLib.File> sortedByBand=listOfFiles.OrderBy(o =>o.Tag.AlbumArtists.FirstOrDefault()).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM