Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XElement分组到Linq to XML中的集合中?_C#_Xml_Linq To Xml - Fatal编程技术网

C# 将XElement分组到Linq to 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

这是一个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 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()