как выбрать последнюю дату в xdocument в c # - PullRequest
1 голос
/ 23 сентября 2019

Я новичок в xml-файле c #.Я пытаюсь удалить дубликаты из XML и сохранить только самые новые по дате путем выбора процесса с помощью выбранного элемента в выпадающем списке:

*The XML structure is:

    <Trace>
       <Log>
       <Process>NPP</Process>
       <LineNo>14</LineNo>
       <Date>12/3/2019 5:47:53 PM</Date>
       <Result>Passed</Result>
       </Log>
       <Log>
       <Process>WET</Process>
       <LineNo>14</LineNo>
       <Date>12/3/2019 5:50:54 PM</Date>
       <Result>Passed</Result>
       </Log>
       <Log>
       <Process>CPL</Process>
       <LineNo>14</LineNo>
       <Date>19/3/2019 5:14:07 AM</Date>
       <Result>Re-input</Result>
       </Log>
       <Log>
       <Process>CPL</Process>
       <LineNo>14</LineNo>
       <Date>19/3/2019 5:17:40 AM</Date>
       <Result>Re-input</Result>
       </Log>
       <Log>
       <Process>CPL</Process>
       <LineNo>14</LineNo>
       <Date>19/3/2019 6:27:43 AM</Date>
       <Result>Re-input</Result>
       </Log>
   </Trace>

Данные по-прежнему отображают результат 3, если я выбираю процесс "CPL".Что я пробовал* Код:

    var xdoc1 = XDocument.Load(@"D:\DataDirectory\DataDirectory145\Product\149329.xml");

    var NewDoc1 = new XDocument(new XElement("Trace",from anEntry in xdoc1.Element("Trace").Elements("Log")
                                    where anEntry.Element("Process").Value.Contains(cmbProcess.SelectedItem.ToString())
                                    orderby anEntry.Element("Date").Value.ToString().First()
                                    select anEntry)
                                    );

        var myList = (from bEntry in NewDoc.Descendants("SerialNo")
                      from bEntry1 in NewDoc1.Descendants("Log")
                      select new
                      {
                          Product_Serial_No = Path.GetFileNameWithoutExtension(bEntry.Element("Product").Value),
                          PWB_Serial_No = Path.GetFileNameWithoutExtension(bEntry.Element("PWB").Value),
                          Process = bEntry1.Element("Process").Value,
                          Line_No = bEntry1.Element("LineNo").Value,
                          Date = bEntry1.Element("Date").Value,
                          Result = bEntry1.Element("Result").Value
                      }
                     ).ToList();

* Я ожидаю, что на выходе будет отображаться самая последняя дата:

|Продукт |PWB |Процесс |Линия № |Дата |Результат |

|149329 .. |149329 .. |CPL |14 |19.03.2009 6:27:43 |Повторный ввод |

1 Ответ

0 голосов
/ 23 сентября 2019

Вы можете упорядочить (по убыванию) лог-потомки по значению даты элемента и выбрать первый элемент.

Например

   var result = xDoc.Descendants("Log")
                    .OrderByDescending(x=> DateTime.Parse(x.Element("Date").Value))
                    .Select(x=> 
                        new
                        {
                            Process = (string)x.Element("Process").Value,
                            Line = (string)x.Element("LineNo").Value,
                            Date = DateTime.Parse(x.Element("Date").Value),
                            Result = (string)x.Element("Result").Value
                        })
                    .First();

Пример вывода

enter image description here

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