使用 linq 将值聚合到 xml
Aggregate a value with linq to xml
我有以下代码:
XElement file = XElement.Load(new XmlNodeReader(FileData));;
var file_data = (
from hl in imported_file.Descendants("HEADER")
select new
{
Year = ((string)hl.Element("Year")),
Customer= ((string)hl.Element("Customer")),
PurchasedItem = (string)hl.Element("PurchasedItem"),
}).Distinct().GroupBy(a => new { a.Year, a.Customer })
我想 select 一个由 Year、Customer 和逗号分隔的购买项目列表绑定到每个分组的 year/Customer 键。
XML样本
<root>
<Header>
<Year>2000</Year>
<Customer>Jani</Customer>
<PurchasedItem>item1</PurchasedItem>
</Header>
<Header>
<Year>2002</Year>
<Customer >Paul</Customer>
<PurchasedItem>item1</PurchasedItem>
</Header>
<Header>
<Year>2000</Year>
<Customer>Jani</Customer>
<PurchasedItem >item2</PurchasedItem>
</Header>
<Header>
<Year>2000</Year>
<Customer >Jani</Customer>
<PurchasedItem >item1</PurchasedItem>
</Header>
<Header>
<Year>2000</Year>
<Customer >Jani</Customer>
<PurchasedItem >item3</PurchasedItem>
</Header>
</root>
如何做到这一点?
首先 - xml 您发布的内容无效(缺少根元素、不正确的结束标记等)。我已经更正了。
关于你的目标。可以这样实现:
var result = file.Descendants("Header").Select(hl => new
{
Year = ((string) hl.Element("Year")),
Customer = ((string) hl.Element("Customer")),
PurchasedItem = (string) hl.Element("PurchasedItem")
})
.Distinct()
.GroupBy(a => new {a.Year, a.Customer})
.Select(r => new
{
Year = r.Key.Year,
Customer = r.Key.Customer,
Items = String.Join(", ", r.Select(x => x.PurchasedItem))
});
主要想法 - 在使用 GroupBy
对数据进行分组后 - 只需添加一些选择器并根据需要重新排列结果。
我有以下代码:
XElement file = XElement.Load(new XmlNodeReader(FileData));;
var file_data = (
from hl in imported_file.Descendants("HEADER")
select new
{
Year = ((string)hl.Element("Year")),
Customer= ((string)hl.Element("Customer")),
PurchasedItem = (string)hl.Element("PurchasedItem"),
}).Distinct().GroupBy(a => new { a.Year, a.Customer })
我想 select 一个由 Year、Customer 和逗号分隔的购买项目列表绑定到每个分组的 year/Customer 键。
XML样本
<root>
<Header>
<Year>2000</Year>
<Customer>Jani</Customer>
<PurchasedItem>item1</PurchasedItem>
</Header>
<Header>
<Year>2002</Year>
<Customer >Paul</Customer>
<PurchasedItem>item1</PurchasedItem>
</Header>
<Header>
<Year>2000</Year>
<Customer>Jani</Customer>
<PurchasedItem >item2</PurchasedItem>
</Header>
<Header>
<Year>2000</Year>
<Customer >Jani</Customer>
<PurchasedItem >item1</PurchasedItem>
</Header>
<Header>
<Year>2000</Year>
<Customer >Jani</Customer>
<PurchasedItem >item3</PurchasedItem>
</Header>
</root>
如何做到这一点?
首先 - xml 您发布的内容无效(缺少根元素、不正确的结束标记等)。我已经更正了。
关于你的目标。可以这样实现:
var result = file.Descendants("Header").Select(hl => new
{
Year = ((string) hl.Element("Year")),
Customer = ((string) hl.Element("Customer")),
PurchasedItem = (string) hl.Element("PurchasedItem")
})
.Distinct()
.GroupBy(a => new {a.Year, a.Customer})
.Select(r => new
{
Year = r.Key.Year,
Customer = r.Key.Customer,
Items = String.Join(", ", r.Select(x => x.PurchasedItem))
});
主要想法 - 在使用 GroupBy
对数据进行分组后 - 只需添加一些选择器并根据需要重新排列结果。