我有一个包含以下列的区域列表:
Zone_id, ZoneName, BuildingName, CityName, RegionName
现在我将我的列表转换为字符串,如下所示:
var result = string.Join(", ", lstOfZones.Select(z => z.RegionName + "->" + z.CityName + "->" + z.BuildingName + "->" + z.ZoneName).ToArray());
,其输出如下:
North->纽约 - >华尔街 - > JbA,
North->纽约 - >华尔街 - > JbB,
南 - >芝加哥 - > Aqua-> HCA,
南 - >芝加哥 - > Aqua->部HcB
但我想要这样的输出:
North->纽约 - >华尔街 - >(JbA,JbB),
南 - >芝加哥 - > Aqua->(HCA,HCB)
请帮忙吗?
答案 0 :(得分:2)
你必须这样做。
var result = string.Join(", ",
lstOfZones.GroupBy(z =>
string.Format("{0}->{1}->{2}->",
z.RegionName, z.CityName, z.BuildingName))
.Select(z => string.Format("{0}({1})",
z.Key, string.Join(", ", z.Select(x => x.ZoneName).ToArray())))
.ToArray());
首先按地址对项目进行分组。这将为您提供IGrouping<string,string>
。第一个是密钥,其地址和第二个是按地址分组的项目列表。
答案 1 :(得分:2)
你可以试试这个:
var result lstOfZones.GroupBy(z => z.RegionName + "->" + z.CityName + "->" + z.BuildingName)
.Select(g=>g.Key+ "->("+ g.Agregate(String.Empty,(a,z)=>a + "," +z.ZoneName) +")")
.ToArray();
在Aggregate
方法中,第一个参数将种子起始值设置为String.Empty
。第二个参数定义了将当前种子值(string
)与当前元素