Сохранение данных из Linq-to-XML с groupBy в объект List - PullRequest
0 голосов
/ 12 мая 2018

У меня есть XML с этой структурой:

<weatherdata>
    <datapoint>
        <location>London</location>
        <rainfall>14</rainfall>
    </datapoint>
......
</weatherdata>

Я хотел бы сохранить среднее количество осадков, сгруппированных по местоположению, в список объектов Datapoint. Объект Datapoint имеет свойства Location и AvgRainfall.

List<Datapoint> datapointList = new List<Datapoint>();
var q = xdoc.Element("weatherdata").Elements("datapoint")
       .GroupBy(e => e.Element("location").Value);

IEnumerable<Datapoint> d = xdoc.Element("weatherdata").Elements("datapoint")
  .GroupBy(e => e.Element("location").Value)
  .Select(x => new Datapoint
   {
      RegionName = x.Key,
      AvgRainfall = x.Select(e => e.Elements("rainfall")
                 .Average(f => double.Parse(f.Value)))
   });

Проблема в том, что свойство AvgRainfall имеет тип double, но x.Select возвращает IEnumerable - double-list. Пожалуйста, укажите мне правильное направление.

изменить: это решение хорошо сработало для моей проблемы:

AvgRainfall = x.Elements("rainfall").Average(f => double.Parse(f.Value)) 

1 Ответ

0 голосов
/ 12 мая 2018

Попробуйте это:

AvgRainfall = x.SelectMany(e => e.Elements("rainfall").Select(f => f.value))
             .Average(g => double.Parse(g))

SelectMany возвращает список определенных элементов из нескольких коллекций.

...