LINQのOrder By


Order By操作
≪適用シーン|Apply Scene|emdw≫:時間ソートなど、クエリーされた文をソートします.
説明:指定した式でコレクションをソートします.遅延、:指定した式でセットをソートします.遅延、デフォルトは昇順、descendingは降順、対応する拡張方法はOrderByとOrderByDescending
1.単純な形式
この例では、orderbyを使用して従業員を雇用日別にソートします.
var q =
    from e in db.Employees
    orderby e.HireDate
    select e;

説明:デフォルトは昇順
2.条件付き形式
注意:WhereとOrder Byの順序は重要ではありません.T-SQLでは、WhereとOrder Byには厳格な位置制限があります.
var q =
    from o in db.Orders
    where o.ShipCity == "London"
    orderby o.Freight
    select o;

文の説明:whereとorderbyを使用して運賃でソートします.
3.降順ソート
var q = 
    from p in db.Products
    orderby p.UnitPrice descending
    select p;

4.ThenBy
文の説明:複合orderbyを使用して顧客をソートし、ソートします.
var q =
    from c in db.Customers
    orderby c.City, c.ContactName
    select c;

説明:複数の式でソートします.たとえば、先にCityでソートし、同時にContactNameでソートします.この文はLambda式でこのように書かれています.
var q = 
    db.Customers
    .OrderBy(c => c.City)
    .ThenBy(c => c.ContactName).ToList();

T-SQLにはThenBy文はなく、OrderByとして翻訳されているので、次の文で表現することもできます.
var q = 
    db.Customers
    .OrderBy(c => c.ContactName)
    .OrderBy(c => c.City).ToList();

なお、複数のOrderBy操作の場合、カスケード方式は逆順である.降順の場合は、対応する降順オペレータで置き換えます.
var q = 
    db.Customers
    .OrderByDescending(c => c.City)
    .ThenByDescending(c => c.ContactName).ToList();

なお、OrderBy操作では、type順のソートはサポートされておらず、匿名クラスもサポートされていない.たとえば
var q = 
    db.Customers
    .OrderBy(c => new
    {
        c.City,
        c.ContactName
    }).ToList();

異常が投げ出されます.エラーは、前の操作に匿名クラスがあり、OrderByと比較した場合、カテゴリです.たとえば
var q = 
    db.Customers
    .Select(c => new
    {
        c.City,
        c.Address
    })
    .OrderBy(c => c).ToList();

OrderBy(c=>c)を使用する場合は、前のステップで生成されたオブジェクトのカテゴリがC#言語の基本タイプであることが前提です.たとえば次のように、Cityはstringタイプです.
var q = 
    db.Customers
    .Select(c => c.City)
    .OrderBy(c => c).ToList();

5.ThenByDescending
この2つの拡張方式はいずれもOrderBy/orderBy/orderByDescendingの後に用いられ,第1のThenBy/ThenByDescending拡張法を第2のソート根拠とし,第2のThenBy/ThenByDescendingを第3のソート根拠とし,このように推す.
var q =
    from o in db.Orders
    where o.EmployeeID == 1
    orderby o.ShipCountry, o.Freight descending
    select o;

文の説明:orderbyを使用して、EmployeeID 1の注文を国に送ってから運賃が高い順にソートします.
6.バンドGroup By形式
var q = 
    from p in db.Products
    group p by p.CategoryID into g
    orderby g.Key
    select new {
        g.Key,
        MostExpensiveProducts =
            from p2 in g
            where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
            select p2
    };

文の説明:orderby、Max、GroupByを使用して、各カテゴリで最も単価の高い製品を導出し、CategoryIDでこの製品のセットをソートします.
 
この文書は次のとおりです.http://www.cnblogs.com/lyj/archive/2008/01/24/1051495.html