gpt4 book ai didi

c# - Linq Where/Group By XML 元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:30:34 25 4
gpt4 key购买 nike

我有一个具有以下结构的 XML 文件:

<RS>
<R>
<C0>14</C0>
<C1>2013-11-29</C1>
<C2>14:29:59</C2>
<C3>289824328</C3>
<C4>COMPANY NAME</C4>
<C5>Top Customers</C5>
<C6>14:29</C6>
</R>
<R>...</R>
</RS>

我是 Linq 的新手,我想了解如何根据以下条件返回查询:

Select C4 As Customer, Sum(C0) As Total
Where C5 = "Top Customers"
Group By C4

我已经根据 Where 和 Group 返回正确的行,但无法理解如何对 C0 元素求和。我在 VS2013 中使用 C#:

XDocument xTest = XDocument.Load("ReportData.xml");

var query = from c in xTest.Descendants("R")
where c.Element("C5").Value == "Top Customers"
group c by c.Element("C4") into d
select new {
Customer = d.Key.Value,
Total = ???
};

谁能帮忙完成最后一 block ……?

干杯,

罗伊

最佳答案

您需要描述您想要对哪个元素求和,在本例中为元素 C0:

var query = from c in elem.Descendants("R")
where (string)c.Element("C5") == "Top Customers"
group c by (string)c.Element("C4") into d
select new {
Customer = d.Key,
Total = d.Sum(x=>(int?)x.Element("C0"))
};

一些注意事项:

  • XElement 分组是行不通的;它会将不同的元素分为两组,即使它们具有相同的值。相反,请考虑按 .Value 分组或转换为 string
  • 通常最好将 XElement 转换为可空类型,而不是使用 .Value 属性。如果没有匹配的元素,转换仍然有效,但 .Value 将导致 NullReferenceException。参见 here

    With C#, however, casting is generally the better approach. If you cast the element or attribute to a nullable type, the code is simpler to write when retrieving the value of an element (or attribute) that might or might not exist.

关于c# - Linq Where/Group By XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com