У меня есть XML-файл с такими данными, как:
<Details>
<TableDef>
<Column Name="Calldate" HeaderName="Calldate" SourceColumnName="Calldate" IsHidden = "false" Position="4" />
<Column Name="Issue" HeaderName="Issues" SourceColumnName="Issues" IsHidden = "false" Position="3" />
<Column Name="ParamortizedValue" HeaderName="paramortizedvalue" SourceColumnName="Value" IsHidden = "false" Position="1" />
<Column Name="PercentBondTotal" HeaderName="percentbondtotal" SourceColumnName="Percentage" IsHidden = "false" Position="2" />
</TableDef>
</Details>
Мне было интересно, что будет лучшим и эффективным способом фильтрации и сортировки элементов по атрибуту, чтобы я мог использовать эти отсортированные элементы далее в моем коде?
В приведенном выше примере я хочу отфильтровать по «IsHidden = false», а затем отсортировать элементы по атрибуту «Position».
У меня есть следующий код, который будет читать все элементы без какой-либо сортировки:
var doc = XDocument.Load("data.xml");
var nodeTableDefInfo = doc.XPathSelectElements("/Details");
var elements = nodeTableDefInfo.Elements("TableDef").Elements();
foreach (var e in elements)
{
//want to work on the sorted elements
}
Ребята, спасибо за все решения. прежде чем я смог прочитать ваше решение, я придумал следующее:
var elements = nodeTableDefInfo.Elements("TableDef").Elements();
var sortedElements = (from element in elements
where element.Attribute("IsHidden").Value == "false"
orderby element.Attribute("Position").Value ascending
select element);
foreach (var e in sortedElements)
{
//work on the sorted elements
}
Теперь, после ознакомления с решениями, мне очень понравилось решение и объяснение, предоставленные GFK
. Я думаю, мне нужна некоторая обработка для нулей. Спасибо всем.