LINQ to XML - why do I get a NullReferenceException while executing my query?

Answered LINQ to XML - why do I get a NullReferenceException while executing my query?

  • Friday, April 06, 2012 7:31 AM
     
      Has Code

    My code:

    string WHXMLHistory = "<?xml version=\"1.0\"?>\r\n<Workflows xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Items>\r\n    <WorkflowsWorkflow>\r\n      <WorklfowID>230c30f4-f69f-48a0-8d77-39896cb88ae4</WorklfowID>\r\n      <Step>\r\n        <WorkflowsWorkflowStep>\r\n          <StartStep>2012-04-02T17:51:34.272725+04:00</StartStep>\r\n          <Curcle>1</Curcle>\r\n          <Task>\r\n            <WorkflowsWorkflowStepTask>\r\n              <ID>90</ID>\r\n              <To>NIDAN\\ostepanova;NIDAN\\kvinogradov;NIDAN\\skechutkina</To>\r\n              <RealTo>NIDAN\\ostepanova;NIDAN\\kvinogradov;NIDAN\\skechutkina</RealTo>\r\n              <Title>Департамент качества</Title>\r\n              <Description>Согласование документа Департамент качества</Description>\r\n              <StartDate>2012-04-02T17:51:34.272725+04:00</StartDate>\r\n              <Duration>24</Duration>\r\n            </WorkflowsWorkflowStepTask>\r\n          </Task>\r\n          <ID>90</ID>\r\n       
     </WorkflowsWorkflowStep>\r\n      </Step>\r\n      <Name>Согласование</Name>\r\n    </WorkflowsWorkflow>\r\n    <WorkflowsWorkflow>\r\n      <WorklfowID>d66ac93d-3df2-42f1-869c-848ec86f8c12</WorklfowID>\r\n      <Step>\r\n        <WorkflowsWorkflowStep>\r\n          <StartStep>2012-04-03T15:27:36.2514978+04:00</StartStep>\r\n          <Curcle>1</Curcle>\r\n          <Task>\r\n            <WorkflowsWorkflowStepTask>\r\n              <ID>90</ID>\r\n              <To>NIDAN\\ostepanova;NIDAN\\kvinogradov;NIDAN\\skechutkina</To>\r\n              <RealTo>NIDAN\\ostepanova;NIDAN\\kvinogradov;NIDAN\\skechutkina</RealTo>\r\n              <Title>Департамент качества</Title>\r\n              <Description>Согласование документа Департамент качества</Description>\r\n              <StartDate>2012-04-03T15:27:36.2514978+04:00</StartDate>\r\n              <Duration>24</Duration>\r\n            </WorkflowsWorkflowStepTask>\r\n          </Task>\r\n          <ID>90</ID>\r\n        </WorkflowsWorkflowStep>\r\n      </Step>\r\n  
        <Name>Согласование</Name>\r\n    </WorkflowsWorkflow>\r\n    <WorkflowsWorkflow>\r\n      <WorklfowID>5c070d9a-afef-46bf-bab7-c27032eded24</WorklfowID>\r\n      <Step>\r\n        <WorkflowsWorkflowStep>\r\n          <StartStep>2012-04-03T15:30:08.5907302+04:00</StartStep>\r\n          <Curcle>1</Curcle>\r\n          <Task>\r\n            <WorkflowsWorkflowStepTask>\r\n              <ID>90</ID>\r\n              <To>NIDAN\\ostepanova;NIDAN\\kvinogradov;NIDAN\\skechutkina</To>\r\n              <RealTo>NIDAN\\ostepanova;NIDAN\\kvinogradov;NIDAN\\skechutkina</RealTo>\r\n              <Title>Департамент качества</Title>\r\n              <Description>Согласование документа Департамент качества</Description>\r\n              <StartDate>2012-04-03T15:30:08.5907302+04:00</StartDate>\r\n              <Duration>24</Duration>\r\n            </WorkflowsWorkflowStepTask>\r\n          </Task>\r\n          <ID>90</ID>\r\n        </WorkflowsWorkflowStep>\r\n      </Step>\r\n      <Name>Согласование</Name>\r\n    </Workflows
    Workflow>\r\n  </Items>\r\n</Workflows>";
    
    XDocument xd = XDocument.Parse(WHXMLHistory);
                    var arrwf = from n in xd.Root.Descendants("WorkflowsWorkflow")
                             orderby n.Element("StartDate").Value
                             select new
                             {
                                 WorkflowID = n.Element("WorklfowID").Value,
                                 StartUser = n.Element("StartUser").Value,
                                 StartDate = n.Element("StartDate").Value
                             };
                    var wf = arrwf.FirstOrDefault();
    The last line throws NullReferenceException. I wonder why and how to avoid it?

All Replies

  • Friday, April 06, 2012 10:48 AM
     
     Answered Has Code
    Here is little bit modified source, and it worked for me
    var arrwf = from n in xd.Root.Descendants("WorkflowsWorkflow")
                        orderby n.Element("Step").Element("WorkflowsWorkflowStep").Element("Task").Element("WorkflowsWorkflowStepTask").Element("StartDate").Value
                        select new
                        {
                            WorkflowID = n.Element("WorklfowID") == null ? null : n.Element("WorklfowID").Value,
                            StartUser = n.Element("StartUser") == null ? null : n.Element("StartUser").Value,
                            StartDate = n.Element("StartDate") == null ? null : n.Element("StartDate").Value
                        };
            var wf = arrwf.FirstOrDefault();


    Please mark as reply if helped.
    Also visit my blog http://msguy.net/

    • Marked As Answer by Senglory Friday, April 06, 2012 11:42 AM
    •