Рассчитать максимальные и минимальные даты с помощью LINQ2XML - PullRequest
0 голосов
/ 25 января 2011

может быть, маленькая проблема, но я не понимаю, что здесь не так.

Приведенный ниже код нацелен на файл XML (пример также ниже) и пытается рассчитать абсолютную минимальную дату и абсолютную максимальную дату из всех одинаковых событий для всех потомков элемента 'eventBlocks'. (самая ранняя / самая поздняя дата всех элементов 'EventC', ...)

Как вы можете видеть, одна из конечных дат для «ElementC» (для примера) имеет конечную дату «14.01.2011». Это должно быть моим значением MaxDateTo. Но результат показывает рассчитанную maxEndDate «1/6/2011» и игнорирует правильное значение.

Я предполагаю, что компаратор принимает его как строку или int и выдает неверный результат.

Что (и как) я должен сделать, чтобы вычислить правильные максимальные и минимальные даты?

Заранее спасибо Marcus

 var xmlDoc = XDocument.Load(@"c:\Temp\MergedCalendar2011.xml");

    var result = from vb in xmlDoc.Descendants("eventBlock")
                 group vb by vb.Attribute("eventName").Value into blocks
                 orderby blocks.Key ascending
                 select new
                 {
                     BlockName = blocks.Key,
                     MinDateFrom = blocks.Min(min => min.Attribute("start").Value),
                     MaxDateTo = blocks.Max(max => max.Attribute("end").Value),
                 };

Это XML:

<?xml version="1.0" standalone="yes"?>
<year year="2011" id="year2011">  
  <state name="Baden Wuerttemberg" >
    <eventBlocks>
      <eventBlock eventName="EventX" start="4/21/2011" end="4/22/2011" />
      <eventBlock eventName="EventX" start="4/26/2011" end="5/1/2011" />
      <eventBlock eventName="EventZ" start="6/14/2011" end="6/26/2011" />
      <eventBlock eventName="EventA" start="7/28/2011" end="9/11/2011" />
      <eventBlock eventName="EventB" start="10/31/2011" end="11/1/2011" />
      <eventBlock eventName="EventB" start="11/2/2011" end="11/5/2011" />
      <eventBlock eventName="EventC" start="1/1/2011" end="1/14/2011" />
      <eventBlock eventName="EventC" start="12/23/2011" end="1/14/2012" />
    </eventBlocks>
  </state>
    <state name="Brandenburg" >   
    <eventBlocks>
      <eventBlock eventName="EventY" start="1/31/2011" end="2/6/2011" />
      <eventBlock eventName="EventX" start="4/20/2011" end="5/1/2011" />
      <eventBlock eventName="EventZ" start="6/3/2011" end="6/4/2011" />
      <eventBlock eventName="EventA" start="6/30/2011" end="8/14/2011" />
      <eventBlock eventName="EventB" start="10/4/2011" end="10/15/2011" />
      <eventBlock eventName="EventC" start="1/1/2011" end="1/2/2011" />
      <eventBlock eventName="EventC" start="12/23/2011" end="1/1/2012" />
    </eventBlocks>
  </state>
  <state name="Bremen">   
    <eventBlocks>
      <eventBlock eventName="EventY" start="1/31/2011" end="2/2/2011" />
      <eventBlock eventName="EventX" start="4/16/2011" end="5/1/2011" />
      <eventBlock eventName="EventZ" start="6/3/2011" end="6/4/2011" />
      <eventBlock eventName="EventZ" start="6/14/2011" end="6/15/2011" />
      <eventBlock eventName="EventA" start="7/7/2011" end="8/18/2011" />
      <eventBlock eventName="EventB" start="10/17/2011" end="10/30/2011" />
      <eventBlock eventName="EventC" start="1/1/2011" end="1/6/2011" />
      <eventBlock eventName="EventC" start="12/23/2011" end="1/1/2012" />
    </eventBlocks>
  </state>
  </year>

1 Ответ

1 голос
/ 25 января 2011

Вы должны преобразовать ваши начальные / конечные строки в дату в вашем запросе:

MinDateFrom = blocks.Min(min => DateTime.ParseExact(min.Attribute("start").Value, "M/d/yyyy", CultureInfo.InvariantCulture)),
MaxDateTo = blocks.Max(max =>  DateTime.ParseExact(max.Attribute("end").Value, "M/d/yyyy", CultureInfo.InvariantCulture)),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...