2014-10-02 59 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);