It was introduced with VS.NET 2008 / .NET 3.5, and is absolutely incredible.
I often wish we had something like it in Java, where I'm still cobbling together foreach loops to process Object Lists, SAX Parsers to process XML, and HQL/JP-QL to select data. I needed to take a list of Objects and write out XML Export in .NET.
Here's my code:
XDocument xmlDocument = new XDocument(new XElement("Agendas", from agenda in orgAgendas select new XElement("Agenda", new XAttribute("Id", agenda.AgendaId), new XElement("AgendaName", agenda.AgendaName), new XElement("MeetingDateTime", agenda.MeetingDateTime), new XElement("MeetingLocation", agenda.MeetingLocation), new XElement("OriginalFileUrl", agenda.AgendaOrigUrl), new XElement("ConvertedFileUrl", agenda.AgendaPdfUrl), new XElement("Type", agenda.Type), new XElement("TypeDesc", agenda.TypeDesc), new XElement("CreateDate", agenda.CreateDate), new XElement("Published", agenda.Publish), new XElement("Sections", from section in agenda.AgendaSections select new XElement("Section", new XAttribute("Id", section.SectionId), new XElement("Text", section.SectionText), new XElement("Type", section.Type), new XElement("Owner", userUtils.GetUserNameById(section.OwnerId.GetValueOrDefault())), new XElement("Items", from item in section.AgendaSectionItems select new XElement("Item", new XAttribute("Id", item.ItemId), new XElement("Text", item.ItemText), new XElement("Owner", userUtils.GetUserNameById(item.OwnerId.GetValueOrDefault())), new XElement("Assignee", userUtils.GetUserNameById(item.AssigneeId.GetValueOrDefault())), new XElement("Completed", item.Completed), new XElement("DueDate", item.DueDate), new XElement("Approved", item.Approved), new XElement("Attachments", from attachment in item.Attachments select new XElement("Attachment", new XAttribute("Id", attachment.AttachmentId), new XElement("Description", attachment.Description), new XElement("OriginalFileUrl", attachment.OriginalUrl), new XElement("ConvertedFileUrl", attachment.ConvertedUrl), new XElement("Confidential", attachment.Confidential) ) ) ) ) ) ) ) ));So elegant ... :-)
No comments:
Post a Comment