2017-07-26 32 views
-1

我有一个列表,我正在尝试按日期时间排序并将其返回。但我得到一个错误,我该如何解决这个问题?排序列表时发生错误缺少演员表

不能类型隐式转换 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

我想所有你需要的是在'OrderBy'后添加一个'ToList'。 – juharr

回答

2

使用ToList()

return dtnbars.OrderBy(x => x.Date_Time).ToList(); 
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 });