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

时间:2015-07-31 14:29:45

标签: c# sorting datetime datatable

我的c#代码将股票报价下载到DataTable对象中。数据以第一列的降序日期显示。我想将此表排序为升序日期。我尝试过以下方法:

table.DefaultView.Sort = "Date";

将表格分类为字符串类型,例如:" 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();

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

[UPDATE] 这是我从列表中创建和填充表格的方式,其中每个条目的格式为例如:&#34; 1/1 / 1994,21.01,22,21,21.01,23131,21.01&#34;

        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);
        }

3 个答案:

答案 0 :(得分:2)

创建数据表时,您必须指定它是一个日期,即使它是字符串格式:

table.Columns.Add("dateValue", typeof(DateTime?));

    var orderedRows = from row in dt.AsEnumerable()
                      orderby  row.Field<DateTime>("Date")
                      select row; 
    DataTable tblOrdered = orderedRows.CopyToDataTable();

或:

var orderedRows = from row in dt.AsEnumerable()
                      let date = DateTime.Parse(row.Field<string>("Date"), CultureInfo.InvariantCulture)
                      orderby date 
                      select row;

This is a similar question但我认为答案也适用于你。

答案 1 :(得分:1)

“Date”列应添加如下:

table.Columns.Add("Date", typeof(DateTime));

而不是

table.Columns.Add("Date");

答案 2 :(得分:1)

创建表时,应将“日期”列添加为:

table.Columns.Add("Date", typeof(DateTime));

然后:

table.DefaultView.Sort = "Date desc";