无法将日期时间转换为字符串

无法将日期时间转换为字符串

问题描述:

我有一个数据库有一些日期,我想获取它们并将它们转换为字符串[]以在图形中使用。无法将日期时间转换为字符串

 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

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

正如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();