Я думаю, что проблема в разделе input.Select(c => {c.driverAddress.Select (d =>
.
Вы уже выполняете итерацию, хотя вводите как i, так что вы можете делать это по
from d in i.driverAddress
select new XElement("address",
new XElement("street1", d.Street1),
new XElement("street2", d.Street2),
и т. Д.
ОБНОВЛЕНИЕ: поскольку адреса драйверов не должны выводиться как дочерние объекты субъекта, попробуйте следующее:
var addresses = new List<DriverAddress>();
input.ForEach(delegate(Subject s) { s.driverAddress.ForEach(d => addresses.Add(d)); });
string subjectId = "S1";
XElement req = new XElement("order",
new XElement("order_dataset",
new XElement("subjects",
from i in input
select
new XElement("subject", new XAttribute("id", subjectId),
new XElement("name",
new XElement("first", i.name.first),
new XElement("middle", i.name.middle),
new XElement("last", i.name.last)
)
)
),
new XElement("addresses",
from d in addresses
select new XElement("address",
new XElement("street1", d.street1),
new XElement("city", d.city),
new XElement("state", d.state),
new XElement("postalcode", d.postalcode)
)
)
)
);