Ваш код имеет несколько проблем.Во-первых, на что жалуется компилятор, как упомянул @MizardX, вы используете fo.Element("Value")
, как если бы это была последовательность.Вероятно, вам нужно написать let e = fo.Element("Value")
(или пропустить эту часть полностью и напрямую написать select fo.Element("Value").Value
).
Другая проблема заключается в том, что ваш XML использует пространство имен, но это не так.Это означает, что вы должны создать XNamespace
объект и использовать его везде, где у вас есть имена элементов.
Кроме того, как написан ваш код, AircraftType
- это последовательность строк.Я предполагаю, что это не то, что вы хотели.
И, видя, что вы хотите сделать то же самое для разных значений FieldName
, вы, вероятно, захотите сделать это методом.все упомянутые выше проблемы исправлены, код должен выглядеть примерно так:
static readonly XNamespace ns = XNamespace.Get("urn:crystal-reports:schemas");
string GetFieldValue(XElement fs, string fieldName)
{
return (from fo in fs.Descendants(ns + "FormattedReportObject")
where fo.Attribute("FieldName").Value == fieldName
let e = fo.Element(ns + "Value")
select e.Value).Single();
}
…
var flts = (from fs in xDoc.Descendants(ns + "FormattedSection")
select new FlightSchedule
{
AircraftType = GetFieldValue(fs, "{AIRCRAFT.Type ID}"),
…
}).ToList();