【问题标题】:Linq Group by Row into ColumnLinq 按行分组
【发布时间】:2017-10-18 13:01:11
【问题描述】:

我有一个 csv 导入到对象中

 obj_cellelist = (from line in File.ReadAllLines(pathCelle)
                             let columns = line.Split(stringSeparators, StringSplitOptions.None)
                             select new obj_celle()
                             {    
                                 Cgi = columns[0],
                                 zonaNis = columns[0].Length > 8 ? int.Parse(columns[0].Substring(5, 3)) : -1,
                                 codice_Sarf = columns[0].Length > 11 ? int.Parse(columns[0].Substring(8, 4)) : -1,
                                 IDCella = columns[1],
                                 Operatore = columns[2],
                                 Void = columns[3],
                                 Via = columns[4].Replace("''", "'"),
                                 Comune = columns[5].Replace("�", "A'"),
                                 Provincia = columns[6],
                                 Regione = provincie.Keys.Contains(columns[6]) ? provincie[columns[6]] : "",
                                 Nazione = columns[7],
                                 Latitudine = decimal.Parse(columns[8].Replace('.', ',')) ,
                                 Longitudine = decimal.Parse(columns[9].Replace('.', ',')) ,
                                 Void1 = columns[10], 
                                 Azimuth = columns[11].Length > 0 ? int.Parse(columns[11]) : -1 }).ToList();

我需要按经度和纬度分组,并获得所有不同的方位角。每个纬度、经度最多有三个不同的方位角。 除cgi外,其他值相同,我不需要。 新对象应包含 zonaNis,codice_Sarf,IDCella,Operatore,Void,Via,Comune,Provincia,Regione,Nazione,Latitudine,Longitudine,Void1,Azimuth1,Azimuth2,Azimuth3

例子:

861###3OF034AA###沃达丰#####STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206#####110

862###3OF034AA###沃达丰#####STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206#####240

864###3OF034AA###沃达丰#####STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206#####110

865###3OF034AA###沃达丰#####STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206#####240

867###3OF034AA###沃达丰#####STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206#####110

868###3OF034AA###沃达丰#####STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206#####240

对象中的输出应该是

3OF034AA###沃达丰######STRADA测试###NOLA###AR###ITALY###43.74619685###11.71866206######110###240

【问题讨论】:

  • minimal reproducible example。用名称、lat、long、whatever 和 show 做一个小例子,使用预期的结果。他们按照你的计算方式。
  • 因为现在还不清楚。因为方位角在点之间。
  • 您是否正在尝试将一个 Csv 转换为另一种 Csv 格式?

标签: c# linq csv


【解决方案1】:
obj_cellelist
   .GroupBy(p => new { Lat = p.Latitudine, Long = p.Longitudine })
   .Select(g => new { place = g.Key, azimuths = g.Select(a => a.Azimuth).Disctinct() })
   .ToList();

这将为您生成具有两个属性的对象列表。第一个属性是 obj_celle 类型,另一个属性是不同方位角列表。

【讨论】:

  • 不工作。我需要新的 zonaNis,codice_Sarf,IDCella,Operatore,Void,Via,Comune,Provincia,Regione,Nazione,Latitudine,Longitudine,Void1,Azimuth1,Azimuth2,Azimuth3
  • 您在属性位置中拥有所有这些值,并且方位角在属性方位角中作为列表。可以有多少个方位角,将它们全部显示为单独的列而不是 List 的单个属性是否至关重要?
猜你喜欢
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多