Я довольно новичок в .NET и, тем более, в LINQ, который я только начал изучать для небольшого проекта, над которым работаю.
У меня есть файл XML, сгенерированный из приложения, которое содержит несколько значений, которые я хочу проанализировать в собственном формате и сохранить в файле.
Я могу заставить один запрос LINQ работать нормально, возвращая значения в мое консольное приложение. Затем выполняется второй запрос, также возвращает запрошенные значения, но затем выдает NRE! Почему он не прекращает итерации по набору результатов после того, как возвращено третье значение?
Во-первых, вот выдержка из файла XML:
<analyse>
<sample>Leer 12</sample> sample ID and number
<id>Leer</id> sample ID
</analyse>
<results>
<element>
<name>c</name>
<value>0.000186156337031958</value>
</element>
<element>
<name>co2</name>
<value>0.000682099902270885</value>
</element>
<element>
<name>s</name>
<value>0.000121750914950204</value>
</element>
<element>
<name>so3</name>
<value>0.000304028592755094</value>
</element>
</results>
Это первый запрос LINQ:
XDocument uniSample = XDocument.Load(limsfile);
var analyse = uniSample.Descendants("analyse").Select(el => new
{
Sample = el.Element("sample").Value,
Id = el.Element("id").Value
});
foreach (var el in analyse)
{
Console.WriteLine("Sample: " + el.Sample);
Console.WriteLine("Sample ID: " + el.Id);
}
Это второй запрос LINQ:
(обратите внимание, как мне пришлось переименовывать анонимный тип Value, потому что он как-то конфликтовал)
var results = uniSample.Descendants("element").Select(elements => new
{
Name = elements.Element("name").Value,
Verdi = elements.Element("value").Value
});
foreach (var el in results)
{
Console.WriteLine("Name: " + el.Name);
Console.WriteLine("Value: " + el.Verdi);
}
Теперь вывод из программы выглядит так, как вы ожидаете
Sample: Leer 12
Sample ID: Leer
Name: c
Value: 0.000186156337031958
Name: co2
Value: 0.000682099902270885
Name: s
Value: 0.000121750914950204
Name: so3
Value: 0.000304028592755094
... но затем после третьей итерации выдается NRE, указывающее на последний запрос LINQ. Почему он не выходит из цикла foreach, как в первый раз ??
Изменить: На самом деле это после четвертой итерации, извините за путаницу! :)
Спасибо!