【发布时间】:2011-04-23 04:45:11
【问题描述】:
我有一个函数,Name(int, DateTime),我想在 linq2sql 查询中使用它。
它是一个简单的函数,使用TimeSpan 计算传入的 DateTime 对象和 DateTime.Now 之间的差异。然后我用 .TotalHours 和传入的 int 做一些基本的数学运算。最复杂的函数是 Math.Pow(double,double)。
public static double Name(int num, DateTime Timestamp)
{
DateTime now = DateTime.Now;
DateTime then = Timestamp;
TimeSpan elapsedSpan = new TimeSpan(now.Ticks - posted.Ticks);
double t = elapsedSpan.TotalHours;
return System.Math.Pow(t, num);
}
我收到此错误:
Method 'Double Name(Int32, System.DateTime)' has no supported translation to SQL.
运行这样的查询时:
var q = from k in db.Stuff
select new {Name=Name(k.num, k.Timestamp)};
我了解该函数无法转换为当前编写的 SQL。有没有办法将我拥有的东西转换成 SQL 可用的东西?
我应该注意 ToList() 或 ToArray() 方法不可用,因为数据表很大。
【问题讨论】:
-
不是答案,但如果您在数据库中使用 Datetime 值,您确实应该使用 UTC 时间,以避免任何与夏令时更改相关的问题,即时间可以向后或向前跳跃。
-
如果重要的话,我在数据库中使用 DateTime2(7)。如何在我的数据库中使用 UTC 时间?
-
有关 SqlServer 2008 中 DateTimeOffset 的有趣信息:blogs.msdn.com/b/bartd/archive/2009/03/31/…
-
只要您想要“现在”,无论是需要存储的值还是需要进行的比较,都只需在代码中使用 DateTime.UtcNow。