У меня есть IEnumerable . Мне нужно преобразовать его в XML. Существует свойство под названием «ZoneId». Мне нужно написать немного XML на основе этого свойства, а затем мне нужны некоторые дочерние элементы, которые предоставляют данные, относящиеся к ZoneId. Я знаю, что мне нужен какой-то тип группировки. Вот то, что я пытался до сих пор без особого успеха. ** инвентарь - это IEnumerable . Поэтому я запрашиваю инвентарь для уникальных зон. Это работает нормально.
var zones = inventory.Select(c => new {
ZoneID = c.ZoneId
, ZoneName = c.ZoneName
, Direction = c.Direction
}).Distinct();
Нет, я хочу создать XML на основе зон и места. *** место является собственностью someClass.
var xml = new XElement("MSG_StationInventoryList"
, new XElement("StationInventory"
, zones.Select(station =>
new XElement("station-id", station.ZoneID)
, new XElement("station-name", station.ZoneName))));
Это не компилируется, так как "станция" выходит за рамки, когда я пытаюсь добавить элемент "имя станции". Однако, если я удаляю парен после «ZoneId», станция находится в области видимости, и я получаю название станции. Единственная проблема заключается в том, что элемент является потомком «идентификатор станции». Это не желаемый результат. Они должны быть братьями и сестрами. Что я делаю неправильно? Наконец, после элемента «имя станции» мне понадобится еще один сложный тип, который является коллекцией. Назовите его «местами». У него будут дочерние элементы, называемые «местами». Его данные будут поступать из IEnumerable, и мне будут нужны только «места», которые имеют «ZoneId» для текущей зоны. Может кто-нибудь указать мне правильное направление «Является ли ошибкой выделение отдельных зон из исходного IEnumerable? Этот объект содержит все необходимые мне данные. Мне просто нужно сделать его иерархическим. Спасибо за любые указатели на все.
Приветствия
Крис в Сан-Диего
**** Редактировать
var zones = inventory.Select(c => new {
ZoneID = c.ZoneId
, ZoneName = c.ZoneName
, Direction = c.Direction
}).Distinct();
var xml = new XElement("MSG_StationInventoryList"
, zones.Select(station => new XElement("StationInventory"
, new XElement("station-id", station.ZoneID)
, new XElement("station-name", station.ZoneName)
, new XElement("station-travel-direction", station.Direction)
, new XElement("detector-list"
, inventory.Where(p=>p.ZoneId == station.ZoneID).Select(plaza=>
new XElement("detector"
, new XElement("detector-id", plaza.PlazaId)))))));
Это сработало.