【发布时间】:2016-10-07 21:22:25
【问题描述】:
谁能告诉我这是否正确,或者是否有更快/更清洁的方法?
//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。你的意思是Value? -
这可能属于code review。这并没有什么问题(除了我指出的错误)。我可能会将 XML 投影到您的对象 首先,然后过滤(因为过滤会更容易一些)。
-
Charles Mager ==> 关于价值完全正确。愚蠢的错误。另外,很抱歉将其发布在错误的部分,甚至不知道有代码审查部分,仍然是新用户。但是我不明白“先投影你的xml然后过滤”的意思,这不是我做的吗? €dit = 好的,看到下面的答案我现在明白了。