gpt4 book ai didi

c# - 如何使用 LINQ 对 XML 数据执行 OrderBy?

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

我在 XML 文件中有如下数据:

<history>
<history-item id="1">
<history-url>www.google.com/ncr</history-url>
<history-date>29/06/2017</history-date>
<history-time>5:27:25PM</history-time>
</history-item>
<history-item id="2">
<history-url>www.yahoo.com</history-url>
<history-date>10/03/2017</history-date>
<history-time>5:30:25PM</history-time>
</history-item>
<history-item id="4">
<history-url>www.google.com/ncr</history-url>
<history-date>23/01/2014</history-date>
<history-time>5:27:25PM</history-time>
</history-item>
<history>

我的目标是根据history-date 对这些数据进行分组和排序。我正在使用以下代码来实现此目的:

    XDocument history = XDocument.Load("history.xml");
var details =
from c in history.Descendants("history-item")
group c by c.Element("history-date").Value into d
select new
{
Value = d.Key,
Rows = d.Elements("history-url")
};

details = details.OrderBy(c => c.Value);

但是,问题在于 - 日期仅按日期排序,即 dd

当我尝试打印它时,输出是:

10/03/2017
23/01/2014
29/06/2017

期望的输出是:

23/01/2014
10/03/2017
29/06/2017

感谢任何帮助!

最佳答案

However, the problem is that - the date is only sorted by the day

这是因为 c.Element("history-date").Value 表达式生成一个 string,而不是一个 DateTime 对象。因此,OrderBy 将这些字符串按字典顺序排列,只要单位数字的天数前面有零前缀,就可以显示出按天排序的效果。

您可以通过在获取这些字符串时对其进行解析来解决此问题,或者如果您希望将它们作为字符串保留在输出中,则可以在订购前立即进行解析:

...
select new
{
Value = DateTime.ParseExact(d.Key, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None)
, Rows = d.Elements("history-url")
};

关于c# - 如何使用 LINQ 对 XML 数据执行 OrderBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650930/

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