0

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

        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 不适用于“非委托类型”错误。我不知道将数组解析为字符串 [] 的任何其他方法。

任何的想法?

4

2 回答 2

4
data[i] = Yaxis[i].ToString();

当您不包含括号时,编译器将假定您正在谈论function ToString,而您实际上是在谈论返回值。

当您谈论函数本身时,它被称为委托(类似于 C/C++ 中的函数指针),它解释了您遇到的错误。

于 2013-02-13T06:50:33.357 回答
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当前文化中的默认字符串表示。您可能需要考虑指定标准自定义日期/时间格式字符串来更改输出格式,甚至可能是不同的文化……这取决于您将如何处理数据。

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

var data = Yaxis.Select(x => x.ToString()).ToArray();
于 2013-02-13T06:53:26.467 回答