2011-01-25 2 views
0

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

Код ниже предназначен для XML-файла (пример также ниже) и пытается вычислить абсолютную минимальную дату и абсолютную максимальную дату от всех тех же событий над всеми потомками элемента EventBlocks элемента. (самая ранняя/последняя Дата всех элементов «EventC», ...)

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

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

Что (и как) мне сделать, чтобы вычислить правильные Макс. И Мин. Даты?

Заранее спасибо Маркус

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

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

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)), 
+0

Hi Alex , Yout решил это. Это недостающая часть. Благодаря!! – Marcus

Смежные вопросы