我对查询感到震惊。请帮帮我。
我有一个xml
<Set type="Main">
<FirstUnit xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<CreateDate>2013-06-06T13:19:17.457</CreateDate>
<PrimaryKey>1</PrimaryKey>
</FirstUnit>
<Secondunit xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<CreateDate>2013-06-06T13:19:17.457</CreateDate>
<PrimaryKey>1</PrimaryKey>
<Exercise>Test</Exercise>
</SecondUnit>
<FirstUnit xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<CreateDate>2013-06-06T13:19:17.457</CreateDate>
<PrimaryKey>2</PrimaryKey>
</FirstUnit>
<Secondunit xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<CreateDate>2013-06-06T13:19:17.457</CreateDate>
<PrimaryKey>2</PrimaryKey>
<Exercise>Test</Exercise>
</SecondUnit>
</Set>
现在我想要的是根据主键对单元进行分组。即,FirstUnit和SecondUnit应该在一个组中具有<Primarykey>
节点值“1”,在另一个组中具有PrimaryKey
节点值“2”的那个。
我已经尝试过以下查询,还需要进行更多精炼,
var elements = xDocument.GroupBy(a => a.Elements().Descendants().Where(x => x.Name.LocalName == "PrimaryKey" ).ToList());
提前致谢。
答案 0 :(得分:1)
在我看来,您只需要按照这些元素的值进行分组:
// If <Set> is the document element, change Descendants("Set") to Root
var elements = xDocument.Descendants("Set")
.Elements()
.GroupBy(x => (int) x.Element("PrimaryKey"));
(如果需要,为元素提供一个命名空间 - 使用Where
子句来检查本地名称有点难看。)
如果这不适合您,请详细说明您要做的事情。