【问题标题】:How to sort joined table results?如何对连接表结果进行排序?
【发布时间】:2011-06-07 09:00:01
【问题描述】:

我的模型:

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

但它不起作用。我觉得现在可以在网络上找到它,但我无法找到它。

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    您调用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。

    【讨论】:

    • 谢谢,看起来不错。
    【解决方案2】:

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

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

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

    【讨论】:

    • 不需要转换成ICollection&lt;Song&gt;吗?以为IOrderedEnumerable&lt;TElement&gt; 只继承IEnumerable&lt;TElement&gt;
    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 2021-08-25
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2021-06-29
    相关资源
    最近更新 更多