如何对联接表结果进行排序
本文关键字:结果 排序 | 更新日期: 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集合;除非你告诉它,否则它不会覆盖原始文件。