如何对联接表结果进行排序

本文关键字:结果 排序 | 更新日期: 2023-09-27 17:58:29

我的型号:

namespace Music.Models
{
    public class Album
    {
        public int AlbumID { get; set; }
        public virtual ICollection<Song> Songs { get; set; }
    }
}
namespace Music.Models
{
    public class Song
    {
        public int SongID { get; set; }
        public int AlbumID { get; set; }
        public int TrackNumber { get; set; }
        public virtual Album Album { get; set; }
    }
}

我想做的是显示一张带有歌曲的指定专辑。我想按TrackNumber对歌曲进行排序。尝试如下:

public ViewResult Details(int id)
{
    Album album = db.Albums.Find(id);
    album.Songs.OrderBy(s => s.TrackNumber);
    return View(album);
}

但它不起作用。我觉得现在能在网上找到它很愚蠢,但没能。

如有任何帮助,我们将不胜感激。

如何对联接表结果进行排序

您调用OrderBy,但返回的有序可枚举对象"丢失"。

您可以在Album类中添加一个getter,它将返回排序后的Tracks。

public class Album
{
    public int AlbumID { get; set; }
    public virtual ICollection<Song> Songs { get; set; }
    public IOrderedEnumerable<Song> SortedSongs {
        get { return Songs.OrderBy(s => s.TrackNumber); }
    }
}

如果生成了模型类,则可以在分部类中包含此getter。

在linq中,通常必须分配运算符的结果,如:

album.Songs = album.Songs.OrderBy(s => s.TrackNumber);

OrderBy创建一个新的orderred集合;除非你告诉它,否则它不会覆盖原始文件。