2014-10-02 69 views
0

检查空收集我使用LINQ的对象转换为XML,并卡住了下面一个问题(简化为简洁起见):的LINQ投影如何从select语句

public class Job 
{ 
    public string JobNumber{ get; set; } 
    public string ClientType { get; set; } 
    public List<ChildItem> ChildItems { get; set; } 
} 

public class ChildItem 
{ 
    public string Id{ get; set; } 
} 

var data = DAL.GetJobs(); 
      var xml = new XElement("records", 
       data.Select(i => new XElement("record", 
        new XAttribute("JobNumber", i.JobNumber),      
        new XAttribute("ClientType", i.ClientType),       
          new XElement("Items", 
           i.ChildItems.Select(j=>new XElement("Item", 
           new XAttribute("ID", j.Id) 
         )))))); 

上面的代码工作正常时ChildItems被初始化并给出

<records> 
    <record JobNumber="12" ClientType="ABC"> 
    <Items> 
    <Item ID="1"/> 
    <Item ID="2"/> 
    </Items> 
    </record> 
</records> 

但是,当Childitems在作业中为空时,会引发错误。如果为空,我想输出的是:

<records> 
<record JobNumber="12" ClientType="ABC"> 
    <Items>   
    </Items> 
</record> 
</records> 

但是,我无法弄清楚如何从Select中检查null?

任何解决方案?

回答

1

请尝试下面的代码,这对我来说工作得很好。

var data = new List<Job> { new Job { JobNumber = "12", ClientType = "ABC" } }; 

     var xml = new XElement("records", 
      data.Select(i => new XElement("record", 
       new XAttribute("JobNumber", i.JobNumber), 
       new XAttribute("ClientType", i.ClientType), 
         new XElement("Items", 
          (i.ChildItems ?? new List<ChildItem>()).Select(j => new XElement("Item", 
          new XAttribute("ID", j.Id) 
        )))))); 

     Console.WriteLine(xml.CreateNavigator().OuterXml);