Разбор XML. Объекты с отношением (один ко многим) - PullRequest
0 голосов
/ 11 марта 2012

У меня есть XML-файл:

<?xml version='1.0' encoding='windows-1251' standalone='yes'?><XML>
  <Result>Ok</Result>
  <Error></Error>
  <Remark></Remark>
  <Data>
    <Theatres>
      <Theatre ID='1' ShowBusyPlaces='1'> // maybe more than one
        <Name><![CDATA[PlaceName]]></Name>
        <NameFull><![CDATA[PlaceName]]></NameFull>
        <Remark><![CDATA[]]></Remark>
        <Address><![CDATA[]]></Address>
        <Halls Count='3'>
          <Hall ID='1'>
            <Name><![CDATA[Redisson]]></Name>
            <Levels Count='1'> 
              <Level ID='1' Geometry='1'> // maybe more than one
                <Name><![CDATA[Radisson]]></Name>
              </Level>
            </Levels>
          </Hall>
          <Hall ID='3'>
            <Name><![CDATA[Test 2]]></Name>
            <Levels Count='0'></Levels>
          </Hall>
          <Hall ID='2'>
            <Name><![CDATA[тест]]></Name>
            <Levels Count='1'>
              <Level ID='4' Geometry='2'>
                <Name><![CDATA[ттт]]></Name>
              </Level>
            </Levels>
          </Hall>
        </Halls>
      </Theatre>
    </Theatres>
  </Data>
</XML>

И у меня есть два класса: BasePlace и HallPlan (отношение как один ко многим)

BasePlace: OID, Name, Address
HallPlan: OID, BasePlaceId, HallId, LevelId

Например, приведенные выше результаты должны быть:

BasePlace table:
OID     Name         Address
1      PlaceName     

HallPlan table:
OID     BasePlaceId, HallId, LevelId
1          1           1       1
2          1           2       4
3          1           3      null

Этот запрос возврата заполняет только BasePlace объект:

var places = from element in XDocument.Parse(xml).Descendants("Theatre")
                          select new BasePlace
                                     {
                                         OIDPremiera = (int) element.Attribute("ID"),
                                         Name = (string) element.Element("Name"),
                                         Address = (string) element.Element("Address"),
                                     };

Как правильно заполнить HallPlan (со всеми полями и отношением к BasePlace)? Спасибо.

1 Ответ

0 голосов
/ 11 марта 2012

Должно быть что-то с эффектом:

        var plans = from element in XDocument.Parse(xml).Descendants("Hall")
                    select new HallPlan
                    {
                        OIDHallPlan = (int) element.Attribute("ID"),
                        BPRef = (BasePlace) (from BasePlace1 in places
                                where (BasePlace1.OIDPremiera == (int)element.Parent.Parent.Attribute("ID"))
                                select BasePlace1).FirstOrDefault(),
                        // ...
                    };
...