#c# #.net-3.5 #linq-to-xml #combobox
#c# #.net-3.5 #linq-to-xml #выпадающий список
Вопрос:
Я пытаюсь взять XML и отобразить два списка со списком. Первый выпадающий список будет содержать отдельный список (т. Е. Без дубликатов) из элементов provinceCode. Во втором выпадающем списке будут отображаться только элементы 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:
Проблема в том, что вы на самом деле не вызываете метод. Вы могли бы написать:
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();
Комментарии:
1. Спасибо, Джон. Ошибка новичка, в которой отсутствуют скобки. Ваше предложение также касалось того, что я на самом деле хотел сделать! И в довершение всего, ваш последний фрагмент кода также делает то, что мне нужно. Я могу создавать списки со списком отсюда.
2. Должен сказать, я впечатлен тем, что может сделать XDocument / Linq, но еще больше меня впечатляют такие люди, как вы, которые так хорошо это понимают и помогают таким людям, как я. Еще раз спасибо.
3. @Doug: ЛОЛ. LINQ to XML — замечательный API, а LINQ в целом — замечательная технология. Получайте удовольствие от них обоих!