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