これが正しいのか、より早く/よりクリーンな方法があれば教えてください。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
およびpはあなたが改善することができ
<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'を返します。あなたは '価値'を意味しましたか? –
これはおそらく[コードレビュー](http://codereview.stackexchange.com/)に属しています。私が指摘した間違いを除いて、これには本当に間違ったことは何もありません。私はおそらくあなたのオブジェクト*最初の*にXMLを投影し、その後(フィルタリングが少し楽になるので)後でフィルタリングします。 –
チャールズ・マージャー==>全く価値がある。愚かな間違い。 また、間違った部分に投稿してごめんなさい、コードレビューセクション、まだ新しいユーザーがあったことを知らなかった。 しかし、私はあなたが "あなたのxmlを最初に投影してフィルタリングする"という意味を持っていません。 €dit = ok、以下の回答を見ました。 – DoctorPrisme