Создание вложенного XML-документа с использованием Linq to Entities и XSD

Я пытаюсь создать XML-документ из источника данных SQL, используя Linq to Entities. Я использовал XSD для создания классов для XML-документа. Структура XML выглядит следующим образом (частичный листинг):

<?xml version="1.0" encoding="UTF-8"?>
<ExecutedShipment>
   <ExecutedShipmentIdentifier>098098</ExecutedShipmentIdentifier>
   <ShipDirection>Outbound</ShipDirection>
   <FreightTerms>Pre-Paid</FreightTerms>
   <CarrierSCAC>SEFL</CarrierSCAC>
   <EquipmentType>LTL</EquipmentType>
   <CarrierTrackingNumber>100283534</CarrierTrackingNumber>
   <LoadList>
      <Load>
         <ExecutedLoadIdentifier>098098</ExecutedLoadIdentifier>
         <Schedule>
            <ActualShipDate timezone="EST">2004-03-19T15:35:00</ActualShipDate>
         </Schedule>
         <PickupSequenceNumber>1</PickupSequenceNumber>
         <DropoffSequenceNumber>1</DropoffSequenceNumber>
         <ShipFrom>
            <SiteIdentifier>123456</SiteIdentifier>
         <FullName>ABC Inc.</FullName>
             <Location>
               <Address1>354 Main Street</Address1>
               <Postal>01234</Postal>
               <Country>US</Country>
            </Location>
        </ShipFrom>

Вот код, который я использую для заполнения класса, чтобы я мог сериализовать его в файл XML:

    List<ExecutedShipment> Shipments = new List<ExecutedShipment>();

    Shipments = (
                from sh in ShipData.shiphead
                where sh.shipdate >= Yesterday && sh.shipdate <= Yesterday
                select new ExecutedShipment
                {
                    ExecutedShipmentIdentifier = SqlFunctions.StringConvert((double)sh.packnum),
                    ShipDirection = "Outbound",
                    FreightTerms = "Pre-Paid",
                    CarrierSCAC = sh.shipviacode,
                    EquipmentType = "LTL",
                    CarrierTrackingNumber = sh.trackingnumber,
                    LoadList = new ExecutedShipmentLoadListLoad
                               { 
                                   ExecutedLoadIdentifier = SqlFunctions.StringConvert((double)sh.packnum),
                                   DropoffSequenceNumber = "TEST"
                                   //Schedule = (new ExecutedShipmentLoadListLoadScheduleActualShipDate
                                   //           {
                                   //               timezone = "EST",
                                   //               Value = "0000-00-00"  //sh.shipdate
                                   //           }).ToArray()
                               }

                }).ToList<ExecutedShipment>();

Первая часть кода работает нормально. Когда я добираюсь до «LoadList», у меня возникает проблема. В Visual Studio «новый ExecutedShipmentLoadListLoad» подчеркнут красным, а ошибка «Невозможно неявно преобразовать тип ExecutedShipmentLoadListLoad» в «ExecutedShipmentLoadListLoad []». «LoadList» — это массив, но ничто из того, что я пытался преобразовать в массив того же типа, не сработало. Итак, вообще говоря, как вы ссылаетесь и присваиваете значения подэлементам в сгенерированном XSD классе?


person Bryan Johnson    schedule 22.08.2012    source источник


Ответы (1)


Вам просто нужно создать массив и поместить экземпляры в объявление массива, например:

// Start array declaration.
LoadList = new [] {

    // First element.
    new ExecutedShipmentLoadListLoad { 
        ExecutedLoadIdentifier = SqlFunctions.StringConvert((double)sh.packnum),
        DropoffSequenceNumber = "TEST"
        //Schedule = (new ExecutedShipmentLoadListLoadScheduleActualShipDate
        //           {
        //               timezone = "EST",
        //               Value = "0000-00-00"  //sh.shipdate
        //           }).ToArray()
    }

    // Other elements here.

// End array declaration
}
person casperOne    schedule 24.08.2012