1721

と の 2 つのテーブルがmoviesあり、最初にcategoryIDで、次にNamecategoriesで順序付けされたリストを取得したいと考えています。

movie テーブルには、 ID 、 Name 、および CategoryID の3 つの列があります。カテゴリ テーブルには、 ID と Nameの 2 つの列があります。

以下のようなことを試しましたが、うまくいきませんでした。

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

7 に答える 7

3049

これはあなたのために働くはずです:

var movies = _db.Movies.OrderBy(c => c.Category).ThenBy(n => n.Name)
于 2008-11-18T13:41:32.987 に答える
620

非ラムダのクエリ構文 LINQ を使用すると、次のことができます。

var movies = from row in _db.Movies 
             orderby row.Category, row.Name
             select row;

[コメントに対処する編集] 並べ替え順序を制御するには、次のようにキーワードascending(デフォルトであるため、特に有用ではありません) またはdescendingを使用します。

var movies = from row in _db.Movies 
             orderby row.Category descending, row.Name
             select row;
于 2010-09-30T14:49:34.210 に答える
79

新しく追加する":

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

それは私のボックスで動作します。ソートに使用できるものを返します。2 つの値を持つオブジェクトを返します。

次のように、結合された列による並べ替えと似ていますが、異なります。

var movies = _db.Movies.OrderBy( m => (m.CategoryID.ToString() + m.Name))
于 2011-06-22T14:27:59.983 に答える
17

最も簡単ではありませんが、LINQ を使用してこれを行う方法が少なくとももう 1 つあります。OrberBy()を使用するメソッドを使用してそれを行うことができますIComparerIComparerまず、次のようにMovieクラスに を実装する必要があります。

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

次に、次の構文で映画を注文できます。

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

項目の 1 つの順序を降順に切り替える必要がある場合は、それに応じてCompare() メソッド内で x と y を切り替えるだけMovieComparerです。

于 2015-04-03T14:07:07.250 に答える
5

汎用リポジトリを使用する場合

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

そうしないと

> _db.Module.Where(x=> ......).OrderBy(x => new { x.Level, x.Rank}).ToList();
于 2018-07-17T14:29:42.083 に答える