Учитывая этот XML:
<?xml version="1.0" encoding="utf-8" ?>
<queryableData>
<table displayName="Shipments" dbName="Quotes">
<foreignKey column="CustomerId" references="CustomerRegistration"/>
<foreignKey column="QuoteStatusId" references="QuoteStatus"/>
<fields>
<field displayName="Quote Charge" dbColumn="QuoteCharge" type="Number"/>
<field displayName="Total Weight" dbColumn="TotalWeight" type="Number"/>
</fields>
</table>
<table displayName="Customers" dbName="CustomerRegistration">
<fields>
<field displayName="First Name" dbColumn="FirstName" type="Text" />
<field displayName="Last Name" dbColumn="LastName" type="Text"/>
</fields>
</table>
</queryableData>
Я хочу получить список анонимных типов объектов, содержащих поля DisplayName, DbColumn и Type только для таблицы "Quotes".
IЯ могу получить список обеих таблиц со следующим кодом LINQ to XML:
var xml = XElement.Load(@"C:\Sandbox\queryable.xml");
// Tables
var tables = from el in xml.Elements("table")
select new
{
Text = el.Attribute("displayName").Value,
Value = el.Attribute("dbName").Value
};
Но я не уверен, как получить значение поля, где атрибут dbName элемента таблицы равен "Котировки".Самое близкое, что я получил, - это список, содержащий список значений, а не список анонимных объектов с одним элементом, имеющим пару dbColumn / displayName:
var columns = from el in xml.Elements("table")
where el.Attribute("dbName").Value.Equals("Quotes")
select new LookupData {
Text = el.Elements("fields").Elements("field").Attributes().Where(x => x.Name == "displayName").Select(x => x.Value),
Value = el.Elements("fields").Elements("field").Attributes().Where(x => x.Name == "dbColumn").Select(x => x.Value)
};
, поэтому я ожидаю этого в списке:
LookupData # 1
Текст: "Quote Charge"
Значение: "QuoteCharge"
LookupData # 2
Текст: «Общий вес»
Значение: «Общий вес»
, и я получаю это вместо:
LookupData #1
Текст: список, содержащий две строки: [0] = "Стоимость цитаты", [1] = "Общий вес"
Значение: Список, содержащий две строки: [0]= "QuoteCharge", [1] = "TotalWeight"