gpt4 book ai didi

c# - LINQ 无法在特定列中按日期排序?

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:43 25 4
gpt4 key购买 nike

我有一个如下所示的 CSV 文件:

1,01/01/2001,a
2,19/09/2013,as
3,12/05/2016,asd
4,13/05/2016,asdf
5,12/12/2012,asdfg
6,05/02/2006,asdfgh
7,06/03/2011,asdfghj

我想按时间顺序对日期进行排序和显示,但我似乎无法让我的代码对其进行排序。但是,我的代码能够根据 CSV 文件中的格式显示日期。

如果CSV文件是这样的:

01/01/2001
19/09/2013
12/05/2016
13/05/2016
12/12/2012
05/02/2006
06/03/2011

然后,它工作得很好。

以下是我的代码:

string parts = new StreamReader(@"C:\input.txt").ReadToEnd();
string[] file = parts.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
StringBuilder sb = new StringBuilder();

for (int i = 0; i < file.Length; i++)
{
string[] data = file[i].Split(new string[] { "," }, StringSplitOptions.None);
string[] dates = new string[] { data[1].ToString() };
//var date = dates.OrderBy(x => DateTime.Parse(x)).ToList();
var date = dates.OrderBy(x => DateTime.ParseExact(x, "dd/MM/yyyy", null));

foreach (string s in date)
{
sb.AppendLine(s + "<br />");
Label1.Text = sb.ToString();
}
}

我已经在 CSV 文件上使用 DateTime.ParseDateTime.ParseExact 测试了这段代码,但它们没有用。

我是 LINQ 查询的新手,这是我第一次使用它。如果对我的代码有什么问题提供解释,我将不胜感激。

最佳答案

您正在对始终包含一个日期的数组 (dates) 进行排序(因为您每次都从循环中的一行创建它)。然后将此行添加到标签的文本中。

在排序之前,您必须创建一个包含所有日期的集合。

string parts = new StringReader(@"C:\input.txt").ReadToEnd();
string[] lines = parts.Split(new string[] {Environment.NewLine}, StringSplitOptions.None);
StringBuilder sb = new StringBuilder();
List<string> dates = new List<string>();
for (int i = 0; i < lines.Length; i++)
{
string[] data = lines[i].Split(new string[] { "," }, StringSplitOptions.None);
dates.Add(data[1]);
}

var datesSorted = dates.OrderBy(x => DateTime.ParseExact(x, "dd/MM/yyyy", null));
foreach (string s in datesSorted)
{
sb.AppendLine(s + "<br />");
}

Label1.Text = sb.ToString();

关于c# - LINQ 无法在特定列中按日期排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37185038/

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