无法将日期时间转换为字符串
问题描述:
我有一个数据库有一些日期,我想获取它们并将它们转换为字符串[]以在图形中使用。无法将日期时间转换为字符串
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在这里不适用于“非委托类型” - 错误。我不知道任何其他方式解析数组到一个字符串[]。
有什么想法?
答
data[i] = Yaxis[i].ToString();
当您不包括括号,编译器将假定你在谈论的功能ToString
,当你实际上是在谈论返回值。
当你谈论函数本身时,它被称为委托(类似于C/C++中的函数指针),它解释了你得到的错误。
答
正如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
的默认字符串表示形式。你可能要考虑指定一个standard或custom日期/时间格式字符串来改变输出格式,甚至可能是一种不同的文化......这取决于你将如何处理数据。
所有这些假设你不需要Yaxis
其他任何东西。如果您做需要Yaxis
,你仍然可以使用LINQ来简化代码:
var data = Yaxis.Select(x => x.ToString()).ToArray();
的ToString不是委托“的ToString()”是一个方法:) – 2013-02-13 06:52:47