1

I have been able to get Linq to XML to work, but I wanted to see if there was a more efficient way of applying the elements to an object rather then putting a foreach statement after I have traversed the xml? I know you can use lamba expressions, but not sure how to apply that to this or if that is possible?

Any suggestions greatly appreciated.

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;
}
scarpacci
  • 8,957
  • 16
  • 79
  • 144

3 Answers3

4

Simply select Order instances:

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
             };

orders will be of type IEnumerable<Order>, but if you need a list:

List<Order> myOrders = orders.ToList();
madd0
  • 9,053
  • 3
  • 35
  • 62
1

use the following as replacement for the code you posted

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();
Yahia
  • 69,653
  • 9
  • 115
  • 144
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();
Piotr Zierhoffer
  • 5,005
  • 1
  • 38
  • 59