无法按c#中的Tag.AlbumArtists排序

时间:2015-12-12 03:35:02

标签: c# sorting mp3

我试图按艺术家和专辑对一组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();

列表&#34; sortedByBand&#34;并且它的伴随排序结果如下:附加信息:至少有一个对象必须实现IComparable。 提前感谢您提供的任何和所有帮助。

2 个答案:

答案 0 :(得分:0)

看起来AlbumArtists是某种枚举(就像一个字符串数组),它不能与其他实例进行比较,因此listOfFiles无法按其排序

在这种情况下,您必须将AlbumArtists转换为可以与其他实例进行比较的内容。例如,一个字符串:

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

当然,这假设在{"Pink Floyd", "U2"}的MP3 之前,艺术家{"U2", "Pink Floyd"}的MP3将会出现。为避免这种情况,您需要在转换为单个字符串之前对艺术家列表进行排序。希望这有帮助!

答案 1 :(得分:0)

我认为你的方法可能不会导致正确的结果,你不应该做双重排序,我瘦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();