如何按日期升序对 DataTable 进行排序?

olh*_*ago 3 c# sorting datatable datetime

我的 C# 代码将股票报价下载到 DataTable 对象中。数据以第一列的降序日期形式出现。我想将此表按日期升序排序。我尝试过以下方法:

table.DefaultView.Sort = "Date";
Run Code Online (Sandbox Code Playgroud)

对表进行排序,就好像它是字符串类型一样,例如:“1/1/1994”、“1/1/1995”、“1/1/1996”而不是所需的“1/1/1994”、“1 /2/1994”、“1/3/1994”。

现在,以下引发 InvalidCastException。

var newTable = table.AsEnumerable().OrderBy(r => r.Field<DateTime>("Date")).CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

注意:此排序发生在返回 DataTable 对象的方法中。

[更新] 这就是我从列表中创建和填充表格的方法,其中每个条目的格式如下:“1/1/1994,21.01,22,21,21.01,23131,21.01”

        List<string> list = Downloaders.DownloadContentToList(symbol);

        DataTable table = new DataTable(symbol);
        table.Columns.Add("Date");
        table.Columns.Add("Open");
        table.Columns.Add("High");
        table.Columns.Add("Low");
        table.Columns.Add("Close");
        table.Columns.Add("Volume");
        table.Columns.Add("Adj Close");

            for (int i = 0; i < list.Count; i++)
        {
            string[] cols = list[i].Split(',');

            DateTime date = Convert.ToDateTime(cols[0]);
            double open = Convert.ToDouble(cols[1]);
            double high = Convert.ToDouble(cols[2]);
            double low = Convert.ToDouble(cols[3]);
            double close = Convert.ToDouble(cols[4]);
            double volume = Convert.ToDouble(cols[5]);
            double adjClose = Convert.ToDouble(cols[6]);
            table.Rows.Add(date, open, high, low, close, volume, adjClose);
        }
Run Code Online (Sandbox Code Playgroud)

小智 5

创建表时,您应该添加“日期”列:

table.Columns.Add("Date", typeof(DateTime));
Run Code Online (Sandbox Code Playgroud)

然后 :

table.DefaultView.Sort = "Date desc";
Run Code Online (Sandbox Code Playgroud)