如何在嵌入列表的列表中使用Linq orderby

时间:2016-10-27 17:54:02

标签: c# linq sql-order-by

我的列表包含地址,我想相应地订购列表。我遇到的问题是在列表中是街道线的列表项,它允许零个或多个街道地址线。我可以使用此命令轻松地对所有其他元素进行排序:

**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."

是否会发生重新排序或是否会出现运行时错误?地址序列假设所有其他单值字段是相同的是什么?

1 个答案:

答案 0 :(得分:1)

.OrderBy()需要为每个元素生成一个可排序的值(对于排序来说是IComparable)。

因此,如果你的元素有一个字符串列表(街道线) - 你需要编写一个函数,它将为每组街道线生成一个值/排名字符串。

琐碎的例子:Sites.OrderBy(x => x.StreetLines?.FirstOrDefault()); //选择第一个可用的街道

.ThenBy()只是一个二级组排序(例如,如果两个站点具有相同的邮政信箱),并且工作方式相同(每个元素的单一排名值)。

主要是找出您想要实施的数据和实际排名方案。