linq - Calculate Max and Min Dates with LINQ2XML -
maybe litte issue, don't understand what's running wrong here.
the code below targeting xml file (sample below) , trys calculate absolute min date , absolute max date same events on descendants of element 'eventblocks'. (earliest/latest date of 'eventc' elements, ...)
as can see 1 of enddates 'elementc' (for eaxample) has enddate '1/14/2011'. should maxdateto value. result shows calculated maxenddate of '1/6/2011'and ignores right value.
i asume comparer takes string or int , provides wrong result.
what (and how) have correct max , min dates calculated?
thanks in advance marcus
var xmldoc = xdocument.load(@"c:\temp\mergedcalendar2011.xml"); var result = vb in xmldoc.descendants("eventblock") group vb vb.attribute("eventname").value 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), };
this 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>
you should convert start/end strings date in query:
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)),
Comments
Post a Comment