2013-10-04 51 views
0

我試圖初始化我實例化的OrderList<OrderItem>字段的以下代碼。我的問題是,Visual Studio不喜歡最內層的LINQ查詢;特別是,它抱怨from,i.Element("OrderItems")select在對象初始化程序中的Linq查詢

以這種方式初始化對象是不可能的,還是我只是在做一些不正確的事情?謝謝,Conor。

var orderXml = XDocument.Load("FileTest\\orders.xml"); 

orderXml.Descendants("Order").Do(i => orderList.Add(new Order() 
{ 
    Customer = new Customer() 
    { 
     ID = new Guid(i.Element("Customer").Element("ID").Value) 
    }, 

    OrderItems = new List<OrderItem>() 
    { 
     from current in i.Element("OrderItems") 
     select new OrderItem() { 
      Product = new Product() 
      { 
       ID = new Guid(current.Element("ID").Value), 
       UnitPrice = current.Element("UnitPrice").Value.To<decimal>() 
      }, 
      Quantity = current.Element("Quantity").Value.To<int>(), 
      TotalPrice = current.Element("TotalPrice").Value.To<decimal>() 
     } 
    } 
})); 
+0

究竟是什麼Visual Studio不喜歡在最內層的LINQ查詢?它是字體大小? –

回答

3

使用對象初始值設定項爲列表中的每個項目添加IEnumerable<T>調用add。但是,您無法直接提供IEnumerable<T>

http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx

考慮使用構造來代替。

OrderItems = new List<OrderItem>(
    from current in i.Element("OrderItems") 
    select new OrderItem() { 
     Product = new Product() 
     { 
      ID = new Guid(current.Element("ID").Value), 
      UnitPrice = current.Element("UnitPrice").Value.To<decimal>() 
     }, 
     Quantity = current.Element("Quantity").Value.To<int>(), 
     TotalPrice = current.Element("TotalPrice").Value.To<decimal>() 
    } 
) 
+0

很好的捕獲,我甚至沒有注意到這裏使用的對象初始化器 –

+0

謝謝。這是有效的。祝你有美好的一天! – ConorW