Самый простой способ получить первый бесплатный идентификатор в записи XML - PullRequest
0 голосов
/ 21 мая 2019

Я добавляю записи в файл XML.Я хочу установить для атрибута Id первое свободное значение или последнее значение + 1. (если идентификаторы 1,3,4,7, то идентификатор, который я хочу установить, равен 2, если 1,2,3,4, то это 5).

Это моя структура xml

<ArrayOfDirectory>
  <Directory Id="0">
    <DirectoryPath>E:\tempFolder1</DirectoryPath>
    <Info>some info</Info>
  </Directory>
  <Directory Id="2">
    <DirectoryPath>C:\tempFolder2</DirectoryPath>
    <Info>some info</Info>
  </Directory>
</ArrayOfDirectory>

Таким образом, я вставляю запись в файл

        WatchedDirectory directoryToSave = (WatchedDirectory)entity;
        XElement newDirectory = new XElement("WatchedDirectory",
            new XAttribute("Id", directoryToSave.Id),
            new XElement("DirectoryPath", directoryToSave.DirectoryPath),
            new XElement("Info","some info"));

        XDocument xDocument = XDocument.Load(DirectoryXmlPath);
        xDocument.Root.Add(newDirectory);
        xDocument.Save(DirectoryXmlPath);

Мой вопрос заключается в том, какой самый простой способ освободить первоеидентификатор, когда я добавляю новую запись?

1 Ответ

0 голосов
/ 21 мая 2019

Вы можете использовать следующий метод расширения:

public static int GetNextSequenceNum(this IEnumerable<int> sequence)
{
    var nums = sequence.OrderBy(i => i).ToList();
    var max = nums[nums.Count - 1];
    return Enumerable.Range(0, max + 1)
        .GroupJoin(nums, i => i, i => i, (i, found) =>
        {
            var f = found.ToList();
            if (f.Count == 0)
                return i;
            else
                return (int?)null;
        })
        .First(i => i.HasValue)
        .Value;
}

Я не даю никаких гарантий, это на 100% точно, но вам нужно:

  1. Вытащите идентификационные номера из вашего XML
  2. Передайте их в метод расширения
  3. Out выдает следующий элемент в последовательности

Для 1,3,4,7 это дает 2 Для 1,2,3,4 это дает 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...