2016-10-27 52 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),并且工作原理相同(每个元素的单一排名值)。

最主要的是找出你想要实现的数据和实际的排名方案。