无法在c#中按Tag.AlbumArtists排序
本文关键字:Tag AlbumArtists 排序 中按 | 更新日期: 2023-09-27 18:26:39
我正在尝试按艺术家和相册对一组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"及其伴随的排序会导致以下消息:附加信息:至少有一个对象必须实现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();