我正在尝试执行以下原始SQL,因为LINQ没有对DateDiff
的适当支持:
var str = @"SELECT ISNULL(AVG(DATEDIFF(DAY, AddedDate, PresentDate)), 0)
AS Days
FROM DummyTable";
使用LINQ to SQL,我试图使用以下方法获取上述语句的输出:
var numberOfDays = Math.Round(db.ExecuteQuery<double>(str).FirstOrDefault());
这给了我错误:Specified cast is not valid.
我做错了什么?
提前致谢!
答案 0 :(得分:3)
您的代码必须更改为:
var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault());
你想为什么?我告诉你:
返回int中的DateDiff类型。返回AVG的类型将为int。所以IsNULL的返回类型也是int。
IsNull总是尝试将第二个表达式的类型转换为第一个表达式。
答案 1 :(得分:0)
好的,我的坏。
看起来演员确实是错误的......将线路改为:
var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
一切都很好!
答案 2 :(得分:0)
DATEDIFF()
会返回int
。传递整数集合时,AVG()
函数也会返回一个整数。请尝试使用此代码:
var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();