我的模特:
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);
}
但它不起作用。我现在能够在网上找到它感到愚蠢,但却无法做到。
任何帮助都将不胜感激。
答案 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。