2011-12-04 223 views
1

我已經能夠讓Linq到XML工作,但我想看看是否有一個更有效的方式將元素應用到對象,而不是在我有了foreach語句之後遍歷了xml?我知道你可以使用lamba表達式,但不知道如何將其應用於此,或者如果可能的話?Linq到XML - 反序列化到對象

任何建議非常感謝。

List<Order> myOrders = new List<Order>(); 

var orders = from order in xdoc.Descendants("Order") 
      select new{ 
        OrderNumber = order.Element("OrderNumber").Value, 
        OrderDate = order.Element("OrderDate").Value, 
        OrderTotal = order.Element("OrderTotal").Value 
      }; 

foreach(var ord in orders) 
{ 
    myOrders.OrderNumber = ord.OrderNumber; 
    myOrders.OrderDate = ord.OrderDate; 
    myOrders.OrderTotal = ord.OrderTotal; 
} 

回答

1

使用下列作爲替代你的代碼發佈

List<Order> myOrders = (from order in xdoc.Descendants("Order") 
         select new Order { 
         OrderNumber = order.Element("OrderNumber").Value, 
         OrderDate = order.Element("OrderDate").Value, 
         OrderTotal = order.Element("OrderTotal").Value 
         }).ToList(); 
4

只需選擇Order實例:

var orders = from order in xdoc.Descendants("Order") 
      select new Order { 
        OrderNumber = order.Element("OrderNumber").Value, 
        OrderDate = order.Element("OrderDate").Value, 
        OrderTotal = order.Element("OrderTotal").Value 
      }; 

ordersIEnumerable<Order>型的,但如果你需要一個列表:

List<Order> myOrders = orders.ToList(); 
0
List<Order> myOrders = new List<Order>(); 

var orders = xdoc.Descendants("Order").Select(x=> new Order{ 
    OrderNumber = x.Element("OrderNumber").Value, 
    OrderDate = x.Element("OrderDate").Value, 
    OrderTotal = x.Element("OrderTotal").Value 
    }); 

myOrders.AddRange(orders) // or just orders.ToList();