2014-02-12 3 views
0

Посмотрите на следующий XML:LINQ к XML-запрос не работает

<Countries> 
    <country name="India"> 
     <State name="Maharashtra" capital="Mumbai" PIN="400001"/> 
     <State Name="Uttar-Pradesh" capital="Lucknow" PIN="220001"/> 
    </country> 
    <country name="Sri-Lanka"> 
     <State name="Colombo" capital="Colombo" PIN="123456"/> 
     <State name="Candy" capital="Jafana" PIN="654321"/> 
    </country> 
</Countries> 

, когда я использую

public IEnumerable<CountryData> GetData() 
{ 
    var results = from States in StockDoc.Descendants("Countries").Descendants("Country") 
         where (string)states.Attribute("Name") == "India" 

         select new CountryData 
    { 
     _State = (string)States.Element("Country").Element("State").Attribute("Name").Value, 
     _Capital = (string)States.Element("Country").Element("State").Attribute("Capital").Value, 
     _Pin= (string)States.Element("Country").Element("State").Attribute("PIN").Value 
    }; 

     return results.ToList(); 
    } 

Это генерирует ошибку реализации. В чем проблема? Также, пожалуйста, определите, что означает вышеуказанное утверждение?

Я хочу, чтобы отобразить все страны, которые в выпадающем DropDownBox'е как-

**India** 
    Maharashtra 
    Uttar-Pradesh 
**Sri-Lanka** 
    Colombo 
    Candy 

Кроме того, его соответствующие значения в качестве капитала и PIN должны отображаться на этикетке. Как я могу это достичь?

привет и спасибо заранее

+0

Пожалуйста, укажите ошибки подробности –

+1

«Ошибка при реализации». средняя ошибка компиляции или ошибка времени выполнения? Что говорит об ошибке? – doctorlove

+0

Опубликовать xml please –

ответ

1

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

Ниже то, что вы хотите:

// I've changed your xml to be consistent. Lowercase name and captial attributes 
string xml = @"<Countries> 
        <country name=""India""> 
         <State name=""Maharashtra"" capital=""Mumbai"" PIN=""400001""/> 
         <State name=""Uttar-Pradesh"" capital=""Lucknow"" PIN=""220001""/> 
        </country> 
        <country name=""Sri-Lanka""> 
         <State name=""Colombo"" capital=""Colombo"" PIN=""123456""/> 
         <State name=""Candy"" capital=""Jafana"" PIN=""654321""/> 
        </country> 
       </Countries>"; 

// Load the xml 
XDocument StockDoc = XDocument.Parse(xml); 

// Get states where country is "India" 
IEnumerable<XElement> states = StockDoc.Root.Descendants("country") 
             .Where(x => (string)x.Attribute("name") == "India") 
             .Descendants("State"); 

// Build a new strongly typed IEnumerable<CountryData> from the xml states. 
// Properties on classes in C# typically do not start with underscores. 
IEnumerable<CountryData> countryData = states.Select(y => new CountryData 
                   { 
                    _State = (string)y.Attribute("name").Value, 
                    _Capital = (string)y.Attribute("capital").Value, 
                    _Pin = (string)y.Attribute("PIN").Value 
                   }); 

Что случилось с вашим щёток запроса:

var results = from States in StockDoc.Descendants("Countries").Descendants("Country") 
        where (string)states.Attribute("Name") == "India" 
        select new CountryData 
{ 
    _State = (string)States.Element("Country").Element("State").Attribute("Name").Value, 
    _Capital = (string)States.Element("Country").Element("State").Attribute("Capital").Value, 
    _Pin= (string)States.Element("Country").Element("State").Attribute("PIN").Value 
}; 

Отредактированный запрос в синтаксисе запроса:

var results = from states in StockDoc.Descendants("Countries").Elements("country") 
       where (string)states.Attribute("name") == "India" 
       select states.Descendants("State") 
       .Select(y => new CountryData 
          { 
           _State = (string)y.Attribute("name").Value, 
           _Capital = (string)y.Attribute("capital").Value, 
           _Pin = (string)y.Attribute("PIN").Value 
          }); 
+0

Этот код еще даёт ошибку времени выполнения - «Null Reference ....» «Ссылка на объект не установлена ​​в экземпляр объекта.». привет – user3248647

+0

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

+0

Спасибо !!! Он работает хорошо. Была моя ошибка. – user3248647

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