1810 Stimmen

Mehrfache "Reihenfolge nach" in LINQ

Ich habe zwei Tabellen, movies y categories und ich möchte eine geordnete Liste erhalten nach categoryID zuerst und dann durch Name .

Die Filmtabelle hat drei Spalten ID, Name und KategorieID . Die Kategorietabelle hat zwei Spalten ID und Name .

Ich habe etwas wie das Folgende versucht, aber es hat nicht funktioniert.

var movies = _db.Movies.OrderBy( m => { m.CategoryID, m.Name })

19voto

prudentcoder Punkte 351

Es gibt mindestens eine weitere Möglichkeit, dies mit LINQ zu tun, wenn auch nicht die einfachste. Sie können es mit Hilfe der OrberBy() Methode, die eine IComparer . Zunächst müssen Sie einführen IComparer für die Movie Klasse wie diese:

public class MovieComparer : IComparer<Movie>
{
    public int Compare(Movie x, Movie y)
    {
        if (x.CategoryId == y.CategoryId)
        {
            return x.Name.CompareTo(y.Name);
        }
        else
        {
            return x.CategoryId.CompareTo(y.CategoryId);
        }
    }
}

Dann können Sie die Filme mit der folgenden Syntax bestellen:

var movies = _db.Movies.OrderBy(item => item, new MovieComparer());

Wenn Sie die Reihenfolge für eines der Elemente auf absteigend umstellen möchten, ändern Sie einfach die x- und y-Werte innerhalb der Compare() Methode der MovieComparer entsprechend.

6voto

Wenn Sie ein allgemeines Repository verwenden

> lstModule = _ModuleRepository.GetAll().OrderBy(x => new { x.Level,
> x.Rank}).ToList();

sonst

> _db.Module.Where(x=> ......).OrderBy(x => new { x.Level, x.Rank}).ToList();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X