Как поместить элементы XDocument в комбинированные списки (второе поле зависит от первого) (C # .net 3.5) - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь взять XML и отобразить два комбинированных списка.Первый комбинированный список будет содержать отдельный список (т.е. без дубликатов) из элементов провинцииCode.Второй выпадающий список покажет только элементы nameEN, соответствующие провинциальному коду.Вот пример моего XML:

<siteList>
  <site code="s0000001">
    <nameEn>Edmonton</nameEn>
    <provinceCode>AB</provinceCode>
  </site>
  <site code="s0000002">
    <nameEn>Vancouver</nameEn>
    <provinceCode>BC</provinceCode>
  </site>
...
</siteList>

У меня есть мой XDocument из этого:

XDocument loaded = XDocument.Parse(strSiteList);

Я борюсь с тем, как извлечь уникальный список провинций.Это что-то вроде:

var list = loaded.Descendants("provinceCode").Distinct;

, но я новичок в C # и XDocument, и я не знаю, какой тип переменной использовать, поэтому я получаю «Невозможно назначить группу методов для неявно типизированной локальной переменной».

И я совершенно не знаю, как поступить с комбо-боксами.Я быстро выполнил поиск по stackoverflow и google, но, похоже, нет ничего подходящего как для XDocument, так и для зависимых комбинированных списков в C #.Является ли использование XDocument неправильным подходом?

Спасибо!

1 Ответ

1 голос
/ 30 сентября 2011

Проблема в том, что вы на самом деле не вызываете метод. Вы могли бы написать:

var list = loaded.Descendants("provinceCode").Distinct();

Обратите внимание на скобки.

но я не думаю, что на самом деле делает то, что вы хотите. Я подозреваю, что вы хотите:

List<string> list = loaded.Descendants("provinceCode")
                          .Select(x => x.Value)
                          .Distinct()
                          .ToList();

Это даст вам список различных кодов провинций в виде списка строк.

Не совсем понятно, что вы имеете в виду во втором списке - это означает, что он соответствует только одному коду провинции? Если так:

List<string> names = loaded.Descendants("site")
                .Where(x => x.Element("provinceCode").Value == provinceCode) 
                .Select(x => x.Element("nameEn").Value)
                .ToList();
...