2016-10-27 6 views
0

私のリストには住所が含まれており、それに応じてリストを注文したいと思います。私が持っている問題は、リストにゼロまたはそれ以上の番地のアドレス行を許可するストリートラインのリスト項目があることです。埋め込みリストのあるリストでLinq orderbyを使用する方法

**C#** 
Sites == Sites.OrderBy(x => x.SiteName).ThenBy(x => x.State).ThenBy(x => x.City).ThenBy(x => x.Zip).ToList 

**VB.NET** 
Sites = Sites.OrderBy(Function(x) x.SiteName).ThenBy(Function(x) x.State).ThenBy(Function(x) x.City).ThenBy(Function(x) x.Zip).ToList 

ほとんどのアドレスには、StreetLinesリストに1つの値が含まれていますが、すべてではありません。コンパイラはストリートラインのために別のthenby引数を追加することができますが、私はそれが何をするのか分かりません。

1. Streetline.Count = 0  
2. Streetline.Count = 2 (0) = "1234 Main St." (1) = "6th Floor" 
3. Streetline.Count = 1 (0) = "P.O. Box 9999" 
4. Streetline.Count = 2 (0) = "1234 Main St." (1) = "4th Floor" 
5. Streetline.Count = 1 (0) = "101 Pacific Blvd." 

並べ替えが発生するか、ランタイムエラーが発生しますか?アドレスのシーケンスは、他のすべての単一値フィールドが同一であると仮定していますか?

+0

コレクションを比較できる比較機能を提供する必要があります。 – SLaks

答えて

1

.OrderBy()は要素ごとに1つのランク付け可能な値(順序付けのためにIComparableなもの)を生成する必要があります。

要素に文字列(ストリートライン)のリストがある場合、ストリートラインのセットごとに値/ランキング文字列を生成する関数を記述する必要があります。

例:Sites.OrderBy(x => x.StreetLines?.FirstOrDefault()); //最初に利用可能な道路線を選択する

.ThenBy()は、2つのサイトが同じPOボックスを持つ場合のセカンダリグループの並べ替えのみで、同じ基準(要素ごとに1つのランク付け可能な値)で動作します。

主なことは、データと実装したい実際のランキングスキームを把握することです。

関連する問題