C# 如何对联接表结果进行排序?
我的模型:C# 如何对联接表结果进行排序?,c#,.net,asp.net,asp.net-mvc-3,sql-order-by,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 S
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; }
}
}
但它不起作用。我觉得自己很愚蠢,因为现在我可以在网上找到它,但却不能
任何帮助都将不胜感激。在linq中,您通常必须分配运算符的结果,如:
album.Songs = album.Songs.OrderBy(s => s.TrackNumber);
OrderBy
创建一个新的orderred集合;它不会覆盖原始数据,除非您告诉它。您调用了OrderBy
,但返回的有序可枚举数据“丢失”
您可以在相册
类中添加一个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); }
}
}
公共类相册
{
public int AlbumID{get;set;}
公共虚拟ICollection歌曲{get;set;}
公共或可数分类歌曲{
获取{return Songs.OrderBy(s=>s.TrackNumber);}
}
}
如果生成了模型类,则可以在分部类中使用此getter。它不需要转换为
ICollection
?思想IOrderedEnumerable
只继承了IEnumerable
。谢谢,这似乎是一个不错的选择。
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); }
}
}