私は次のクエリ構文を使用しています
from table
where
where
orderby
orderby
最初のorderbyは日付で、2番目のorderbyは日付です。私はこれがorderby thenbyのように機能すると思いますが、何か他のことをしているように見えます。
拡張構文を使用せずに上記の構文を使用してorderbyを実行するにはどうすればよいですか? (とった)
そして、orderby、orderbyは何をしますか?
拡張構文を使用せずに上記の構文を使用してorderbyを実行するにはどうすればよいですか?.
フィールド間にコンマを使用します。
orderby a, b
そして、orderby、orderbyは何をしますか?
行でorderby
を2回使用すると、要素は概念的に最初に最初のorderby
を使用してソートされ、次に2番目のorderby
を使用して再度ソートされます。ソートは 安定したソート (2番目のorderby
で結び付けられたオブジェクトは、最初のorderby
itでソートした後と同じ順序のままになります。事実上、これは次のことを意味します。
var query = from x in l
orderby x.A
orderby x.B
select x;
以下と同等です:
var query = from x in l
orderby x.B, x.A
select x;
その結果、orderby
の用語が、おそらく意図したものと入れ替わります。
LINQ to SQLでテストする
これは、LINQ to SQLで試して確認できます。次のクエリを作成しました。
var query = from a in dc.Orders
orderby a.Date
orderby a.CustomerID
select a;
これが生成されたSQLでした:
SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]
orderby a.Date
は無視されません。両方の用語はORDER BY句に含まれていますが、意図した順序とは逆の順序になっています。
ThenBy
演算子は、セカンダリの昇順ソート順序をシーケンスに適用します。次のようなT-SQLで2次ソート順を適用することに似ています。
Select * from Customer order by FirstName,lastName
Linqでは、これを次のように書くことができます。
var thenby = mode.CustList.Select(cus => new
{
cus. FirstName,
cus. LastName,
cus. EmailAddress
}).OrderBy(cus => cus. FirstName).ThenBy(cus => cus. LastName);
詳細については、こちらで確認できます。 http://dotnetreaders.com/articles/ThenBy_in_LINQ_c-sharp,_Orderby_Thenby_in_LINQ_C-sharp/204
クエリ式構文 でThenByを実行するのは簡単です。最初のorderbyの後にカンマと2番目のステートメントを続けるだけです。
// Create the data source.
List<Student> students = GetStudents();
// Create the query.
IEnumerable<Student> sortedStudents =
from student in students
orderby student.Last ascending, student.First ascending
select student;
標準のクエリ演算子(拡張メソッド)を使用して2番目のorderbyを適用すると、実際には2番目のorderbyが最初のorderbyを含むクエリ結果の結果に適用されます。実際には、2番目のorderbyのみが適用されますが、最初の注文の計算にはCPU時間を費やします。
実際には、Enumerable.OrderByおよびEnumerable.ThenByメソッドの MSDNドキュメント で直接回答されています。
IOrderedEnumerableはIEnumerableを継承するため、OrderBy、OrderByDescending、ThenBy、またはThenByDescendingの呼び出しの結果に対してOrderByまたはOrderByDescendingを呼び出すことができます。これを行うと、以前に確立された順序を無視する新しいプライマリ順序が導入されます。
Thenbyへの答えは次のようになります
orderby 1、2
パート2は他の人に任せます。