2016-10-27 87 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列表中的一個值,而不是全部。編譯器允許我爲Streetline添加另一個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()需要爲每個元素生成一個單一的可排序值(對於排序來說是IComparable)。

所以,如果你的元素有一個字符串列表(街道) - 你需要編寫一個函數,將生成每組路線的價值/排名字符串。例如:Sites.OrderBy(x => x.StreetLines?.FirstOrDefault());其中, //選擇第一條可用的路線

.ThenBy()只是一個輔助組排序(例如,如果兩個站點具有相同的PO Box),並且工作原理相同(每個元素的單一排名值)。

最主要的是找出你想要實現的數據和實際的排名方案。