2009-05-28 52 views
2

嗨我已经注意到,如果我使用TimespanObj.ToString()它给我完美的输出像12:33:00。Timespan LINQ查询中的字符串问题

但我使用下面的linq查询。

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

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

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

回答

4

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

尝试直接提取FromTime属性,然后调用ToString()代替结果。您可以强制处理在使用AsEnumerable,如果你想保留它在所有LINQ查询.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() }); 
+0

好!我可以在SQL端进行转换吗?因为我也在提取其他信息。不只是时间。 – Vikas 2009-05-28 06:58:26

1

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

从MSDN(时间数据类型):

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

+0

我使用MS SQL2008和FromTime是时间类型(7)。然后我使用LINQ-to-SQL类,而FromTime将是Timespan的类型。 – Vikas 2009-05-28 06:46:11