How do I use LINQ to XML to create a list of objects?
c#, linq, linq-to-xml
Solution
`e` is just a parameter name your passing to the lambda expression, `new Notification()`. You can use it like this:
notificationList = x.Element("Notifications")
.Elements("Notification")
.Select(e => new Notification()
{
href = (string)e.Attribute("href")
notificationDetails = (DateTime)e.Element("NotificationDate")
notificationDate = (string)e.Element("NotificationDetails")
status = (string)e.Element("Status")
notificationTitle = (string)e.Element("NotificationTitle")
}
.ToList();
Or if you prefer query syntax
notificationList =
(from e in x.Element("Notifications").Elements("Notification")
select new Notification()
{
href = (string)e.Attribute("href")
notificationDetails = (DateTime)e.Element("NotificationDate")
notificationDate = (string)e.Element("NotificationDetails")
status = (string)e.Element("Status")
notificationTitle = (string)e.Element("NotificationTitle")
})
.ToList();
Problem
I have some inbound XML that I am trying to read with LINQ to generate a list of objects: ``` <SCResponse> <link href="http://192.168.6.126:8001/affiliate/account/81/notifications?startRow=2&limit=20" rel="next_page" title="Next"/> <link href="http://192.168.6.126:8001/affiliate/account/81/notifications?startRow=1&limit=20" rel="previous_page" title="Previous"/> <RecordLimit>20</RecordLimit> <Notifications> <Notification href="http://192.168.6.126:8001/affiliate/account/81/notifications/24"> <NotificationDate>2013-03-15T16:41:37-05:00</NotificationDate> <NotificationDetails>Notification details 1</NotificationDetails> <Status>New</Status> <NotificationTitle>Test notification 1</NotificationTitle> </Notification> </Notifications> <RecordsReturned>1</RecordsReturned> <StartingRecord>1</StartingRecord> <TotalRecords>1</TotalRecords> ``` And I've created a simple POCO object to represent a 'Notification': ``` public class Notification { public System.DateTime notificationDate; public string notificationDetails; public string status; public string notificationTitle; public string href; } ``` and I'd like to read the incoming XML and create a list of objects. ``` List<Notification> notificationList; XElement x = XElement.Load(new StringReader(result)); if (x != null && x.Element("Notifications") != null) { notificationList = x.Element("Notifications") .Elements("Notification") .Select(e => new Notification() .ToList(); } ``` I'm really unclear about the 'e' part and how to initialize a new Notification object. Can ya help?