排序缺少演员表的列表时出错

时间:2017-07-26 17:40:50

标签: c#

我有一个列表,我试图按日期时间排序并返回它。但是我收到了一个错误。我该如何解决这个问题?

  

无法隐式转换类型   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; }
}

2 个答案:

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