我的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 对象的方法中进行的。
[更新] 以下是我如何从一个列表中创建和填充表格,其中每个条目的格式为例如:"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);
}