[解決済み] LINQ OrderByとThenByの比較
2022-06-19 16:30:52
質問
どのような違いがあるのでしょうか。
tmp = invoices.InvoiceCollection
.OrderBy(sort1 => sort1.InvoiceOwner.LastName)
.OrderBy(sort2 => sort2.InvoiceOwner.FirstName)
.OrderBy(sort3 => sort3.InvoiceID);
と
tmp = invoices.InvoiceCollection
.OrderBy(sort1 => sort1.InvoiceOwner.LastName)
.ThenBy(sort2 => sort2.InvoiceOwner.FirstName)
.ThenBy(sort3 => sort3.InvoiceID);
3つのデータで並べたい場合、どちらが正しい方法でしょうか?
どのように解決するのですか?
あなたは
間違いなく
使用する
ThenBy
を使うのではなく、複数の
OrderBy
を呼び出す必要はありません。
私はこれを提案します。
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
毎回同じ名前を使うことができることに注意してください。これも同等です。
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
もしあなたが
OrderBy
を複数回呼び出すと、効果的に配列の順序を入れ替えることができます。
完全に
を3回繰り返すと、最後の呼び出しが事実上優勢になります。あなたは
は
(と書くことができます(LINQ to Objectsで)。
foo.OrderBy(x).OrderBy(y).OrderBy(z)
と同じです。
foo.OrderBy(z).ThenBy(y).ThenBy(x)
を使うとソート順が安定しますが、絶対にやめたほうがいいです。
- 読みにくい
- パフォーマンスが悪い (シーケンス全体を並べ替えるため)
- よくあること ではない は他のプロバイダ (例: LINQ to SQL) では動作しないかもしれません。
-
基本的にどのように
OrderBy
は使用されるように設計されています。
のポイントは
OrderBy
は、最も重要な順序の投影を提供することです。
ThenBy
を(繰り返し)使用して、二次、三次などの順序付けの投影を指定します。
事実上、このように考えてください。
OrderBy(...).ThenBy(...).ThenBy(...)
を使うと、任意の二つのオブジェクトに対して一つの複合比較を構築し、その結果を並べ替えることができます。
一度
でシーケンスをソートします。これは、ほぼ間違いなくあなたが望むことです。
関連
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] LINQのGroup by
-
[解決済み] DataTableに対するLINQクエリ
-
[解決済み] LINQ集計アルゴリズム説明
-
[解決済み] IEnumerable<T> / IQueryable<T>の動的なLINQ OrderBy
-
[解決済み] LINQ Orderby Descending Query(LINQ降順クエリ
-
[解決済み] LINQ .Any VS .Exists - 違いは何ですか?
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
-
[解決済み] LINQ: 区分された値
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] C# LINQ リスト内の重複を検索する
-
[解決済み] IEnumerable<T>のforeachのLINQでの等価性
-
[解決済み】Lambda式でOrderBy descending?
-
[解決済み】LINQ グループバイをディクショナリーオブジェクトに入れる
-
[解決済み】Entity Framework。このコマンドに関連するオープンなDataReaderがすでに存在します。
-
[解決済み] LINQを使用してデータをPivotすることは可能ですか?
-
[解決済み] Linqのgroup byのカウントを持つ
-
[解決済み] IQueryableとIEnumerableの違いは何ですか[重複]。
-
[解決済み] LINQ: 区分された値
-
[解決済み] LINQ OrderByとThenByの比較