我的列表包含地址,我想相应地订购列表。我遇到的问题是在列表中是街道线的列表项,它允许零个或多个街道地址线。我可以使用此命令轻松地对所有其他元素进行排序:
**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列表中包含一个值,但不是全部。编译器允许我为Streetlines添加另一个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 :(得分:1)
.OrderBy()需要为每个元素生成一个可排序的值(对于排序来说是IComparable)。
因此,如果你的元素有一个字符串列表(街道线) - 你需要编写一个函数,它将为每组街道线生成一个值/排名字符串。
琐碎的例子:Sites.OrderBy(x => x.StreetLines?.FirstOrDefault()); //选择第一个可用的街道
.ThenBy()只是一个二级组排序(例如,如果两个站点具有相同的邮政信箱),并且工作方式相同(每个元素的单一排名值)。
主要是找出您想要实施的数据和实际排名方案。