c # Как подсчитать общее количество комбинированных значений элементов, используя XElement - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть фрагмент XElement, содержащий тысячи записей.Мне нужно иметь возможность подсчитать объединенное значение элементов qty для каждого элемента уникального идентификатора

Так, например, у меня есть сотни расходных материалов (расходных материалов) для процедур ремонта, каждый из которых имеет уникальный идентификатор(увидеть ниже).Идентификатор может быть вызван 50 раз в моем фрагменте XElement, если это часто используемый расходный материал, и он может иметь значение больше 1 в элементе qty.Мне нужно перебрать мой фрагмент XElement, подсчитав общую сумму значений элементов qty для каждого из идентификаторов.

<supplies>
     <supply>
        <id>104</id>
        <qty>1</qty>
     </supply>
     <supply>
        <id>27</id>
        <qty>1</qty>
     </supply>
     <supply>
        <id>104</id>
        <qty>5</qty>
     </supply>
     <supply>
        <id>104</id>
        <qty>10</qty>
     </supply>
     <supply>
        <id>16</id>
        <qty>2</qty>
     </supply>
</supplies>

В этом примере мне нужно сложить значение всех элементов qty дляидентификатор 104 поставки (который в данном примере равен 16), затем значение для всех идентификаторов поставки 27 (который равен 1) и то же самое для идентификатора поставки 16 (который равен 2).Мне нужно сделать это для сотен уникальных идентификаторов.

Меня не беспокоит, как мне представляется общая сумма для каждого из них, это может быть добавление элемента к каждому идентификатору, если необходимо, называемого «Всего».'возможно.

Есть идеи, как этого добиться?

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете использовать xml linq и словарь для получения желаемых результатов

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            Dictionary<int, int> dict = doc.Descendants("supply")
                .GroupBy(x => (int)x.Element("id"), y => (int)y.Element("qty"))
                .ToDictionary(x => x.Key, y => y.Sum());
        }
    }
}
...