如何对连接表结果进行排序?

时间:2011-06-07 09:00:01

标签: c# .net asp.net asp.net-mvc-3 sql-order-by

我的模特:

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);
}

但它不起作用。我现在能够在网上找到它感到愚蠢,但却无法做到。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

你打电话给OrderBy但是返回的有序可枚举是“丢失”。

您可以在Album类中添加一个getter,它会返回已排序的曲目。

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。