LINQ to XML: отложить выбор детей в Silverlight C #? - PullRequest
1 голос
/ 01 июня 2009

У меня есть следующий XML-документ, загружаемый в C # Silverlight:

<parent>
    <son name="Jim">
        <grandson>Billy</grandson>
        <granddaughter>Sue</granddaughter>
    </son>
    <daughter name="Sally">
    </daughter> 
</parent>

Я бы хотел выполнить запрос LINQ, чтобы я запрашивал родительский элемент и получал список только для "сын" и "дочерний" узлов. Когда я добираюсь до узла типа «сын», я хочу сделать еще один запрос для его собственных потомков.

Я пробовал это:

 IEnumerable<XElement> Children =
                    from childNode in parents.Descendants()
                    select (XElement)childNode ;

foreach(XElement childNode in Children){
// other code 
}

но это дает мне все (сын, дочь, внук, внучка).

Я хотел бы сделать что-то вроде этого:

  foreach(XElement childNode in Children){
    switch(childNode.Name.ToString()){
         case "son": 
            // look for "grandson" and "granddaughter" as children of "son" now
            break;
        case "daughter":
           // don't look for anything
           break;
        }
    }

Итак, в основном, я хочу, чтобы в запросе возвращался только первый уровень дочерних элементов, а остальные я буду запрашивать позже.

Я не уверен, следует ли это делать в исходном запросе LINQ, в условии foreach или как. У меня нет контроля над форматом документа XML, поэтому я не могу изменить его на что-то лучшее. Спасибо!

1 Ответ

2 голосов
/ 01 июня 2009

Если я правильно понимаю ваш вопрос, вам нужно использовать функцию Elements:

            var sons_qry = from son in parents.Elements()
                      select son;

            var grandsons_qry = from grandson in sons_qry.Descendants()
                                select grandson;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...