2013-10-04 19 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