Может ли кто-нибудь сказать мне, если это правильно или если есть более быстрый/чистый способ сделать это?Оптимизация LinqToXml
//I load p as a xDoc so I can use linq to xml
XDocument myDoc = XDocument.Parse(p);
// retrieve each "Item" node except if orderedQuantity is 0 or name is "nullorderitem"
IEnumerable<XElement> orderedRes = from item in myDoc.Descendants("Item")
where ((double)item.Element("orderedQuantity") > 0 && item.Element("ResourceId").Name != "NULLOrderItem")
select item;
foreach (XElement xelem in orderedRes)
{
if(xelem.Element("Name").Value.ToLower() == "oneofmyvalueIneed"
|| xelem.Element("Name").Value.ToLower() == "anotherone"
|| xelem.Element("Name").Value.ToLower() == "yetanother")
{
FieldProperties elem = new FieldProperties();
elem.Fieldname = xelem.Element("Name").Value;
elem.Fieldvalue = xelem.Element("OrderedQuantity").Value;
lElem.Add(elem);
}
}
Зная, что lElem список FieldProperties и FieldProperties является класс вида:
FieldProperties
string fieldname
string fieldvalue
и р является строкой, которая выглядит как
<items>
<item>
<resourceid>blablabla</resourceid>
<somerandomtag>whocares</somerandomtag>
<orderedquantity>0.0</orderedquantity>
</item>
<item>
<resourceid>oneofmyvalueIneed</resourceid>
<somerandomtag>whocares</somerandomtag>
<orderedquantity>1.0</orderedquantity>
</item>
<item>
<resourceid>yetanother</resourceid>
<somerandomtag>whocares</somerandomtag>
<orderedquantity>0.0</orderedquantity>
</item>
</items>
Эта часть не имеет смысл: 'item.Element (" ResourceId "). Name! =" NULLOrderItem ")'. Имя всегда 'ResourceId', оно всегда возвращает' true'. Вы имели в виду 'Value'? –
Вероятно, это относится к [обзору кода] (http://codereview.stackexchange.com/). В этом нет ничего плохого (кроме ошибки, которую я указал). Я бы, вероятно, проецировал XML на ваш объект * сначала *, а затем фильтр потом (так как фильтрация была бы немного проще). –
Charles Mager ==> Совершенно верно о ценности. Глупая ошибка. Кроме того, извините, что он отправил его в неправильную часть, не знал, что даже был раздел обзора кода, по-прежнему новый пользователь. Но я не понимаю, что вы подразумеваете под «спроецировать свой xml сначала, а затем фильтровать», разве это не то, что я делаю? € dit = ok, см. Ниже ответ. Я получил его сейчас. – DoctorPrisme