2014-12-15 3 views
0
<states_Page> 
    <states> 
    <state id="sectionenable" systemstate="n" focuscontrol="" default=""> 
    </state> 
</states> 
<states> 
    <state id="controlenable" systemstate="n" focuscontrol="" default=""> 
    </state> 
</states> 
<states> 
    <state id="controldisable" systemstate="n" focuscontrol="" default=""> 
    </state> 
</states> 
<states> 
    <state id="controldisable2" systemstate="n" focuscontrol="" default=""> 
    </state> 
</states> 
<states> 
    <state id="sectionenable2" systemstate="n" focuscontrol="" default=""> 
    </state> 
</states> 
<states> 
    <state id="sectionenable" systemstate="n" focuscontrol="" default=""> 
    </state> 
</states> 
</states_Page> 

есть 6 элементов в корневом элементе .., чтобы получить отчетливые узлы путем фильтрации-потомка значения атрибута узла

я хочу узлы, которые имеющие уникальное имя атрибута.

поэтому мне нужно вернуть только 5 элементов, имеющих разные значения атрибутов. Я пробовал linq, но он возвращает значение отдельного атрибута. Но мне нужен весь Элемент.

var ds = (from ele in root.Elements("states").Elements("state") 
      select ele.Attribute("id").Value).Distinct(); 

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

ответ

0

Попробуйте это: -

var result = xdoc.Root.Descendants("states") 
         .GroupBy(x => x.Element("state").Attribute("id").Value) 
         .Select(x => x.First()); 

Если вы хотите, чтобы извлечь элементы вместо узлов, вы можете использовать anonymous типы, как это: -

var result = xdoc.Root.Descendants("states") 
        .GroupBy(x => x.Element("state").Attribute("id").Value) 
        .Select(x => 
         { 
         var firstNode = x.First().Element("state"); 
         return new 
         { 
          StateId = firstNode.Attribute("id").Value, 
          SystemState = firstNode.Attribute("systemstate").Value, 
          Focuscontrol = firstNode.Attribute("focuscontrol").Value, 
          Default = firstNode.Attribute("default").Value 
          }; 
         }); 
+0

Спасибо Rahul..Your Первое решение Working Fine .. :) – Raji

+0

@Raji - Добро пожаловать. Будучи новичком в SO, я бы предложил пройти через эту ссылку - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work и принять ответ, если это «помогло», :) –

Смежные вопросы