Требуется помощь по глубокому анализу LINQ to XML - PullRequest
0 голосов
/ 24 января 2012

Я новичок в LINQ to XML, и я смотрел учебники, но я не нашел того, который имеет достаточную глубину, чтобы пройти мой блок.В моем случае я обратился к нашему поставщику за информацией по указанному адресу.Существует вероятность того, что адрес не будет точным совпадением, поэтому они отправляют мне обратно файл XML с возможными адресами.

Здесь приведен фрагмент XML для нескольких списков адресов, возвращаемых с адреса.query:

    <POSSIBLE-ADDRESSES>
              <POS-ADDR>
                <BUILDING>
                  <Street>1905 W HENDERSON RD                                      </Street>
                  <City>COLUMBUS                      </City>
                  <RiskID>123456</RiskID>
                </BUILDING>
                <OCCUPANTS>
                  <OCCUP>
                    <ID>010</ID>
                    <Desc>MC DONALD'S RESTAURANT (1S)        </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>015</ID>
                    <Desc>MC DONALD'S RESTAURANT             </Desc>
                  </OCCUP>
                </OCCUPANTS>
              </POS-ADDR>
              <POS-ADDR>
                <BUILDING>
                  <Street>1821 HENDERSON RD                                        </Street>
                  <City>UPPER ARLINGTON               </City>
                  <RiskID>1234567</RiskID>
                </BUILDING>
                <OCCUPANTS>
                  <OCCUP>
                    <ID>010</ID>
                    <Desc>ARLINGTON SQUARE SHOPPING CTR (1S) </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>015</ID>
                    <Desc>1821 SWAN DRY CLNG                 </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>020</ID>
                    <Desc>4681 ALEX'S BISTRO ON REED/REST    </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>025</ID>
                    <Desc>4687-93 BLUMEN GARTEN              </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>030</ID>
                    <Desc>4697 BLIMPIE/SANDWICH SHOP         </Desc>
                  </OCCUP>
                </OCCUPANTS>
              </POS-ADDR>
            </POSSIBLE-ADDRESSES>

Теперь то, что я делаю, это перетаскиваю все здания (имейте в виду, что их может быть гораздо больше) со следующим, а затем связываю это со списком - нет, важная персона:

    var qBuildings = from LOP in loaded.Descendants("BUILDING")
    select new
    {
      BuildingName = LOP.Element("Street").Value,
      RiskId = LOP.Element("RiskID").Value
    };

Это дает мне все здания, в которых я нуждаюсь, вместе с их идентификаторами риска.

Теперь кикер - это как тянуть «обитателей», когда пользователь выбирает данное здание на основе идентификатора риска, скажемпервый RiskID "123456".Поэтому, если пользователь выберет это здание, он выйдет и схватит каждого пассажира, увлажняющего класс жильца, и добавит этот класс в список жильцов, который я затем свяжу с другим списком.

Все, что я пробовал, такДалеко не удалось добиться результатов, пытаясь заполучить жителей.Я знаю, что это должно быть вопросом навигации, но я не могу построить запрос так, чтобы он возвращал что-нибудь полезное.Каждый идентификатор риска уникален, и в каждом здании может не быть ни одного, ни нескольких жильцов.Так что я теряюсь в том, как тянуть жителей.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 25 января 2012

Мне кажется, вы хотите выбрать жильцов из pos-адреса, чье здание имеет определенный идентификатор риска.В LINQ-to-XML это может выглядеть так:

var posAddr =
    (from pos in possibleAddresses.Elements("POS-ADDR")
     where (int)pos.Element("BUILDING").Element("RiskID") == riskIdToLookFor
     select pos)
    .Single();

var occupants =
    from o in posAddr.Element("OCCUPANTS").Elements("OCCUP")
    select new
    {
        Description = (string)o.Element("DESC")
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...