Я назначаю меня для деревенского идиота.Простой запрос Linq to XML
Почему это не работает:
foreach (XElement clientField in _clientXml.Descendants("row").Descendants())
{
var newFieldName =
from sourceField in _sourceEntries.Descendants("Field")
where (string)sourceField.Attribute("n") == (string)clientField.Attribute("n")
select new
{
FieldName = ((string) sourceField.Attribute("n")),
AcordRef = ((string) sourceField.Attribute("m"))
};
foreach (var element in newFieldName)
{
Console.WriteLine("Field Name: {0}",
element.FieldName, element.AcordRef);
}
}
Мои исходные файлы XML загружаются с XElement.Load (MyFileName). В debug clientField имеет атрибут n = «Номер политики». Первый элемент _sourceEntries.Descendants («Поле») также имеет атрибут n = «Номер политики». Действительно, каждый элемент в _clientXml.Descendants ("row"). Descendants() имеет соответствующую строку в _sourceEntries.Descendants ("Field"). И я знаю достаточно, чтобы знать, что выбор ленив, поэтому в отладке я смотрю блок Console.WriteLine. Независимо от того, что я пробовал, newFieldName - пустой набор.
На всякий случай, вот первый элемент файла клиента:
<Column_0 n="Policy Number">ABC000123</Column_0>
И вот кулак элемент коллекции _sourceEntries:
<Field n="Policy Number" c="1" l="" s="" cd="" m="1805" f="" />
Я знаю, что это будет что-то простое , но я просто не понимаю, что я делаю неправильно.
Спасибо.
Рэнди
Ваш Console.Write имеет странную строку формата Console.WriteLine «Имя поля: {0}» с одним аргументом, но вы передаете 2 ... Предполагая, что вы хотите видеть оба они не должны быть «Имя поля: {0 }, значение {1} "? – 2010-12-16 23:13:03
@ EoRaptor13 в _clientXml - это дескриптор узла или строка строки? – 2010-12-16 23:21:07
Julian, row, в нижнем регистре. Alexi, извините, забыли добавить второй аргумент в Writeline. У меня было двое, но когда это не сработало, попробуйте сделать это проще, только написав один. Еще нет радости. Спасибо, что посмотрели на него. – EoRaptor013 2010-12-17 01:16:31