Как отсортировать результаты объединенной таблицы? - PullRequest
1 голос
/ 07 июня 2011

Мои модели:

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

Но это не работает.Я чувствую себя глупо из-за того, что теперь могу найти его в Интернете, но не смог.

Любая помощь будет признательна.

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Вы звоните 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); }
    }
}

Вы можете использовать этот метод получения в частичном классе, если ваш класс модели сгенерирован.

1 голос
/ 07 июня 2011

В linq вам обычно приходится присваивать результат оператора, например:

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

OrderBy создает новую упорядоченную коллекцию; он не перезаписывает оригинал, если вы не скажете это.

...