LINQのOrder By
Order By操作
≪適用シーン|Apply Scene|emdw≫:時間ソートなど、クエリーされた文をソートします.
説明:指定した式でコレクションをソートします.遅延、:指定した式でセットをソートします.遅延、デフォルトは昇順、descendingは降順、対応する拡張方法はOrderByとOrderByDescending
1.単純な形式
この例では、orderbyを使用して従業員を雇用日別にソートします.
説明:デフォルトは昇順
2.条件付き形式
注意:WhereとOrder Byの順序は重要ではありません.T-SQLでは、WhereとOrder Byには厳格な位置制限があります.
文の説明:whereとorderbyを使用して運賃でソートします.
3.降順ソート
4.ThenBy
文の説明:複合orderbyを使用して顧客をソートし、ソートします.
説明:複数の式でソートします.たとえば、先にCityでソートし、同時にContactNameでソートします.この文はLambda式でこのように書かれています.
T-SQLにはThenBy文はなく、OrderByとして翻訳されているので、次の文で表現することもできます.
なお、複数のOrderBy操作の場合、カスケード方式は逆順である.降順の場合は、対応する降順オペレータで置き換えます.
なお、OrderBy操作では、type順のソートはサポートされておらず、匿名クラスもサポートされていない.たとえば
異常が投げ出されます.エラーは、前の操作に匿名クラスがあり、OrderByと比較した場合、カテゴリです.たとえば
OrderBy(c=>c)を使用する場合は、前のステップで生成されたオブジェクトのカテゴリがC#言語の基本タイプであることが前提です.たとえば次のように、Cityはstringタイプです.
5.ThenByDescending
この2つの拡張方式はいずれもOrderBy/orderBy/orderByDescendingの後に用いられ,第1のThenBy/ThenByDescending拡張法を第2のソート根拠とし,第2のThenBy/ThenByDescendingを第3のソート根拠とし,このように推す.
文の説明:orderbyを使用して、EmployeeID 1の注文を国に送ってから運賃が高い順にソートします.
6.バンドGroup By形式
文の説明:orderby、Max、GroupByを使用して、各カテゴリで最も単価の高い製品を導出し、CategoryIDでこの製品のセットをソートします.
この文書は次のとおりです.http://www.cnblogs.com/lyj/archive/2008/01/24/1051495.html
≪適用シーン|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