C# 将XElement分组到Linq to XML中的集合中?
这是一个XML示例:C# 将XElement分组到Linq to XML中的集合中?,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,这是一个XML示例: <ProblemFactory Name="Diagnostic exam" Count="1"> <Condition ObjectiveID="1" Type="1" CountRanges="2" Range1Decimals="0" Range1Min="3" Range1Max="10" Range2Decimals="0" Range2Min="6" Range2Max="10" /> <Condition Obje
<ProblemFactory Name="Diagnostic exam" Count="1">
<Condition ObjectiveID="1" Type="1" CountRanges="2" Range1Decimals="0" Range1Min="3" Range1Max="10" Range2Decimals="0" Range2Min="6" Range2Max="10" />
<Condition ObjectiveID="1" Type="1" CountRanges="2" Range1Decimals="0" Range1Min="6" Range1Max="10" Range2Decimals="0" Range2Min="6" Range2Max="10" />
</ProblemFactory>
创建范围集合是我的问题。如何构造XML文件或查询以创建集合?集合将包含:RangeDecimals、RangeMin、RangeMax
我不确定,但我可以想象要解决这个问题,我必须重新构造我的条件元组:
<Condition ObjectiveID="1" Type="1" >
<RangesCollection>
<Range RangeDecimals="0" RangeMin="3" RangeMax="10" />
<Range RangeDecimals="0" RangeMin="6" RangeMax="10" />
</RangesCollection>
</Condition>
采用新的格式
Ranges = condition.Descendants("Range")
.Select(range => new {
Min = (int)range.Attribute("RangeMin"),
Max = (int)range.Attribute("RangeMax"),
Decimals = (int)range.Attribute("RangeDecimals")
})
.ToArray()
采用新的格式
Ranges = condition.Descendants("Range")
.Select(range => new {
Min = (int)range.Attribute("RangeMin"),
Max = (int)range.Attribute("RangeMax"),
Decimals = (int)range.Attribute("RangeDecimals")
})
.ToArray()
虽然可以按照您的要求(Jimmy的回答)进行操作,但我强烈建议您按照您提到的方式更改XML的结构。您肯定应该重新构造您的条件,以便最终使用现有的条件。特别是因为范围的计数可能会有所不同。虽然你根本不需要
CountRanges
。哦,这是真的。我可以从集合中得到它。虽然可以按照您的要求(Jimmy的回答)进行操作,但我强烈建议您按照您提到的方式更改XML的结构。您肯定应该重新构造您的条件,以便最终使用您所拥有的。特别是因为范围的计数可能会有所不同。虽然你根本不需要CountRanges
。哦,这是真的。吉米,我喜欢你的解决方案。您认为您可以帮助我使用我发布的新结构化查询转换此代码吗?对于LINQ到XML查询,通常最好对类型执行显式转换,而不是像那样解析它。都是内置的,吉米,我喜欢你的解决方案。您认为您可以帮助我使用我发布的新结构化查询转换此代码吗?对于LINQ到XML查询,通常最好对类型执行显式转换,而不是像那样解析它。都是内置的。
Ranges = condition.Descendants("Range")
.Select(range => new {
Min = (int)range.Attribute("RangeMin"),
Max = (int)range.Attribute("RangeMax"),
Decimals = (int)range.Attribute("RangeDecimals")
})
.ToArray()