2011-06-07 142 views
1

我的模型:如何对连接表结果进行排序?

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

但它不起作用。我觉得现在能够在网上找到它,但是无法做到。

任何帮助,将不胜感激。

回答

1

您致电OrderBy但返回的有序枚举是“丢失”。

您可以在您的Album类中添加一个吸气剂,它将返回排序的曲目。

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放入分部类中。

+0

谢谢,似乎是一个干净利落的路。 – PawelMysior 2011-06-07 09:17:35

1

在LINQ,你通常要结果分配操作,如:

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

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

+0

是否需要转换为ICollection '?以为'IOrderedEnumerable '只继承'IEnumerable '。 – DanielB 2011-06-07 09:13:11

相关问题