我是以下的XML:
<?xml version="1.0" standalone="yes"?>
<TestSuite>
<TestCase Name="XXX" ID="123;234; 345; 456">
<CodeBlock />
</TestCase>
<TestCase Name="East" ID="11,22,33, 44, 55">
<CodeBlock />
</TestCase>
</TestSuite>
我需要获取所有ID并通过ID ASC订购,下面是我的Linq:
var r = (from lv1 in xdoc.Descendants("TestCase")
select new { ID = lv1.Attribute("ID").Value })
.Where(d => d.ID != string.Empty)
.GroupBy(l => l.ID)
.ToList();
我现在得到:
123;234; 345; 456
11,22,33, 44, 55
但我怎样才能获得ID:
11
22
33
44
55
123
234
345
456
答案 0 :(得分:3)
不清楚你为什么要进行分组......而你只需要将SelectMany
分割出来并按照它的外观展平:
var separators = new[] { ';', ',' };
var r = xdoc.Descendants("TestCase")
.Select(x => (string) x.Attribute("ID"))
.Where(ids => ids != null)
.SelectMany(ids => ids.Split(separators,
StringSplitOptions.RemoveEmptyEntries))
.Select(id => int.Parse(id.Trim()))
.OrderBy(id => id)
.ToList();
请注意,我已将每个ID解析为整数,理由是如果您将它们视为字符串,则&#34; 123&#34;来自&#34; 55&#34;。如果他们实际上不一定是整数,但是你想要排序任何可以解析为整数的值,那么排序部分会变得更加棘手。
答案 1 :(得分:2)
这可能有效:
var r = (from lv1 in xdoc.Descendants("TestCase")
select new { ID = lv1.Attribute("ID").Value }).
Where(d => d.ID != string.Empty).OrderBy(l => int.Parse(l.ID)).ToList();