如何将<entities>列表转换为一个带分组的字符串?

时间:2015-10-20 12:06:03

标签: c# asp.net entity-framework linq list

我有一个包含以下列的区域列表:

Zone_id, ZoneName, BuildingName, CityName, RegionName

现在我将我的列表转换为字符串,如下所示:

var result = string.Join(", ", lstOfZones.Select(z => z.RegionName + "->" + z.CityName + "->" + z.BuildingName + "->" + z.ZoneName).ToArray());

,其输出如下:

  

North-&gt;纽约 - &gt;华尔街 - &gt; JbA,

     

North-&gt;纽约 - &gt;华尔街 - &gt; JbB,

     

南 - &GT;芝加哥 - &GT; Aqua-&GT; HCA,

     

南 - &GT;芝加哥 - &GT; Aqua-&GT;部HcB

但我想要这样的输出:

  

North-&gt;纽约 - >华尔街 - &gt;(JbA,JbB),

     

南 - &GT;芝加哥 - &GT; Aqua-&GT;(HCA,HCB)

请帮忙吗?

2 个答案:

答案 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)与当前元素

连接起来的方法