时间跨度到LINQ查询中的字符串问题

时间:2009-05-28 06:38:12

标签: .net linq

您好我已经注意到,如果我使用TimespanObj.ToString(),它会给我提供完美的输出,如12:33:00。

但我使用以下linq查询。

var time = SomeSimpleQuery.Select(t => new { time = t.FromTime.ToString() });

其中FromTime是SQL数据库中的时间(7)和LINQ-TO-SQL类中的Timespan(默认情况下)。

然后我得到的输出格式如“jan 1 1900 12:00 PM”。为什么呢?

2 个答案:

答案 0 :(得分:4)

我怀疑这是因为查询的“ToString”部分是在SQL中而不是在.NET中执行的。您应该能够通过检查正在执行的SQL来确认这一点。

尝试直接获取FromTime属性,然后在结果上调用ToString()。如果要将所有内容保存在LINQ查询中,可以使用AsEnumerable强制在.NET端执行处理:

var time = SomeSimpleQuery.Select(t => t.FromTime)
                          .AsEnumerable()
                          .Select(t => new { time = t.ToString() });

如果你想获取其他东西,只需通过:

var query = SomeSimpleQuery.Select(row => new { UserId=row.UserId,
                                                Query=row.Query,
                                                Time=t.FromTime })
                           .AsEnumerable()
                           .Select(t => new { t.UserId, t.Query,
                                              Time=t.FromTime.ToString() });

答案 1 :(得分:1)

我不记得具有时间跨度类型的SQL。时间只是一天中的一小时。

从MSDN(对于时间数据类型):

  

定义一天的时间。现在的时间是   没有时区意识,是   基于24小时制。