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