无法将datetime转换为字符串

时间:2013-02-13 06:49:58

标签: c# entity-framework

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

        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。我不知道将数组解析为字符串[]的任何其他方法。

有什么想法吗?

2 个答案:

答案 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的默认字符串表示形式。您可能需要考虑指定standardcustom日期/时间格式字符串来更改输出格式,甚至可能是不同的文化...这取决于您要对数据

所有这些都假定您不需要Yaxis来做任何其他事情。如果你需要Yaxis,你仍然可以使用LINQ来简化代码:

var data = Yaxis.Select(x => x.ToString()).ToArray();