2013-02-13 66 views
0

我有一個數據庫有一些日期,我想獲取它們並將它們轉換爲字符串[]以在圖形中使用。無法將日期時間轉換爲字符串

 var Yaxis = db.Graphs 
        .Where(x => x.Node.Contains(Node)) 
        .Select(x => x.Dates) 
        .ToArray(); 


     var data = new string[Yaxis.Length]; 
     for (int i = 0; i < Yaxis.Length ; i++) 
     { 
      data[i] = Yaxis[i].ToString; 
     } 

.ToString在這裏不適用於「非委託類型」 - 錯誤。我不知道任何其他方式解析數組到一個字符串[]。

有什麼想法?

+1

的ToString不是委託「的ToString()」是一個方法:) – 2013-02-13 06:52:47

回答

4
data[i] = Yaxis[i].ToString(); 

當您不包括括號,編譯器將假定你在談論的功能ToString,當你實際上是在談論返回值。

當你談論函數本身時,它被稱爲委託(類似於C/C++中的函數指針),它解釋了你得到的錯誤。

+0

@Habib不,這正好解決了這個問題。看看最後三個字符。 – antonijn 2013-02-13 06:51:40

+0

@Habib:不,不是 - 括號在問題中不存在。這是重要的一點,雖然Antonijn應該包括解釋它的文字。 – 2013-02-13 06:51:49

+1

@Habib,這個答案包含ToString()方法的括號。所以,答案是正確的.... – platon 2013-02-13 06:52:01

2

正如Antonijn發佈的那樣,當前的問題是您在使用ToString時未實際調用該方法。

然而,你可以做得比這更好的通過LINQ做下手:

var data = db.Graphs 
      .Where(x => x.Node.Contains(Node)) 
      .Select(x => x.Dates.ToString()) 
      .ToArray(); 

請注意,我們在這裏呼籲在投影ToString()。如果不給你想要的結果(例如,因爲它執行在數據庫中的轉換),你可以把它拆分成兩個Select電話,與AsEnumerable呼叫迫使第二個在本地執行:

var data = db.Graphs 
      .Where(x => x.Node.Contains(Node)) 
      .Select(x => x.Dates) 
      .AsEnumerable() 
      .Select(x => x.ToString()) 
      .ToArray(); 

這當然,在當前的文化中將使用DateTime的默認字符串表示形式。你可能要考慮指定一個standardcustom日期/時間格式字符串來改變輸出格式,甚至可能是一種不同的文化......這取決於你將如何處理數據。

所有這些假設你不需要Yaxis其他任何東西。如果您需要Yaxis,你仍然可以使用LINQ來簡化代碼:

var data = Yaxis.Select(x => x.ToString()).ToArray(); 
相關問題