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

本文关键字:转换 字符串 时间 日期 | 更新日期: 2023-09-27 17:58:50

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

        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的默认字符串表示。您可能需要考虑指定一个标准或自定义的日期/时间格式字符串来更改输出格式,甚至可以指定不同的区域性。。。这取决于你将如何处理这些数据。

所有这些都假设您不需要Yaxis来执行任何其他操作。如果确实需要Yaxis,您仍然可以使用LINQ来简化您的代码:

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