繁体   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