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