如何按日期倒序对数据列表进行排序?

问题描述 投票:0回答:2

示例 XML:

<AssignmentHistory>
    <PublicTalkInfo>
        <PublicTalkNumber>21</PublicTalkNumber>
        <PublicTalkSpeaker>Name3</PublicTalkSpeaker>
        <PublicTalkCongregation>Place3</PublicTalkCongregation>
    </PublicTalkInfo>
    <PublicTalkInfo>
        <MeetingDate>2023-10-15</MeetingDate>
        <PublicTalkNumber>21</PublicTalkNumber>
        <PublicTalkSpeaker>Name</PublicTalkSpeaker>
        <PublicTalkCongregation>Place</PublicTalkCongregation>
    </PublicTalkInfo>
    <PublicTalkInfo>
        <MeetingDate>2023-11-15</MeetingDate>
        <PublicTalkNumber>21</PublicTalkNumber>
        <PublicTalkSpeaker>Name2 </PublicTalkSpeaker>
        <PublicTalkCongregation>Place</PublicTalkCongregation>
    </PublicTalkInfo>
</AssignmentHistory>

为了简单起见,我把它删减了。

public string[] GetHistoryForTalkOutline(string historyDatabase, int talknumber)
{
    List<string> list = new List<string>();
    try
    {
        XDocument doc = XDocument.Load(historyDatabase);
        var ptInfo = doc
                        .Descendants("PublicTalkInfo")
                        .Where(p => p.Element("PublicTalkNumber").Value == talknumber.ToString()).ToList();
        SimpleLog.Log(ptInfo.Count().ToString());
           foreach (var pt in ptInfo)
           {
               var date = pt.Element("MeetingDate");
               var speaker = pt.Element("PublicTalkSpeaker");
               var cong = pt.Element("PublicTalkCongregation");

               if (date != null && speaker != null && cong != null)
               {
                   DateTime objectdate = DateTime.Parse(date.Value);
                   string histitem = objectdate.ToString("d") + ", ";
                   histitem += speaker.Value + " (";
                   histitem += cong.Value + ")";
                   list.Add(histitem);
               }

           }

        return list.ToArray();
    }
    catch (Exception ex)
    {
        SimpleLog.Log(ex);
        return null;
    }
}

我确信代码可以简化。但是,如何构建最终的字符串列表,其中内容按日期降序排列?请注意,某些条目没有字段。

c# xml linq-to-xml
2个回答
1
投票

您可以将它们保留为保留日期值的格式,而不是将所有值存储在字符串列表中。例如,使用 tuple:

List<(DateTime Date, string Value)> list = new List<(DateTime, string)>();

稍后添加到列表时,请执行以下操作:

list.Add((objectdate, histitem));

要按您需要的顺序返回值,请使用一些简单的 Linq:

return list
    .OrderByDescending(x => x.Date)
    .Select(x => x.Value)
    .ToArray();

0
投票

也许可以尝试一些类似的事情

using System;
using System.Linq;
using System.Xml.Linq;

....

        var doc = XDocument.Parse(xml);

        var sortedElements = doc.Root.Elements("PublicTalkInfo")
            .OrderByDescending(e => (DateTime)e.Element("MeetingDate"))
            .ToList();

在这些行之后,您可以解析、验证并添加到结果列表中。

© www.soinside.com 2019 - 2024. All rights reserved.