我有一个列表,我试图按日期时间排序并返回它。但是我收到了一个错误。我该如何解决这个问题?
无法隐式转换类型
System.Linq.IOrderedEnumerable<ConsoleApplication2.DTNBars>
来System.Collections.Generic.List<ConsoleApplication2.DTNBars>
。一个 存在显式转换(您是否错过了演员?)
public static List<DTNBars> getDTNBars(string symbol, DateTime dt)
{
TextReader tr = new StreamReader(File.Open(@"C:\historicaldata\" + symbol + ".txt", FileMode.Open));
List<DTNBars> dtnbars = new List<DTNBars>();
CsvReader csvr = new CsvReader(tr);
while (csvr.Read())
{
DTNBars b = new DTNBars();
b.Date_Time = csvr.GetField<DateTime>(0);
b.Open = csvr.GetField<double>(1);
b.High = csvr.GetField<double>(2);
b.Close = csvr.GetField<double>(4);
b.Ticker = symbol;
dtnbars.Add(b);
}
return dtnbars.OrderBy(x => x.Date_Time);
}
public class DTNBars
{
public DateTime Date_Time { get; set; }
public double Open { get; set; }
public double High { get; set; }
public double Low { get; set; }
public double Close { get; set; }
public string Ticker { get; set; }
}
答案 0 :(得分:2)
使用ToList()
return dtnbars.OrderBy(x => x.Date_Time).ToList();
答案 1 :(得分:2)
您的方法声明返回类型为List<DTNBars>
,但您将返回IOrderedEnumerable<DTNBars>
- 这是OrderBy
的结果。添加ToList()
:
return dtnbars.OrderBy(x => x.Date_Time).ToList();
或者更好的方法是将返回类型更改为IEnumerable<DTNBars>
此外,您可以重构初始化新DTNBars
并使用对象初始值设定项:
dtnbars.Add( new DTNBars {
Date_Time = csvr.GetField<DateTime>(0),
Open = csvr.GetField<double>(1),
High = csvr.GetField<double>(2),
Close = csvr.GetField<double>(4),
Ticker = symbol });