C# 为标量值运行直接SQL的LINQ到SQL

C# 为标量值运行直接SQL的LINQ到SQL,c#,sql-server,sql-server-2008,linq-to-sql,C#,Sql Server,Sql Server 2008,Linq To Sql,我正在尝试执行以下原始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<dou

我正在尝试执行以下原始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());
var numberOfDays=Math.Round(db.ExecuteQuery(str.FirstOrDefault());
这给了我一个错误:
指定的强制转换无效。

我做错了什么

提前谢谢

好吧,我的错

看来演员真的错了。。。将行更改为:

var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
var numberOfDays=db.ExecuteQuery(str.FirstOrDefault();
一切都很好

好吧,我的错

看来演员真的错了。。。将行更改为:

var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
var numberOfDays=db.ExecuteQuery(str.FirstOrDefault();
一切都很好

DATEDIFF()
返回一个
int
。当传递一组整数时,
AVG()
函数也会返回一个整数。请尝试以下代码:

    var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
var numberOfDays=db.ExecuteQuery(str.FirstOrDefault();
DATEDIFF()
返回一个
int
。当传递一组整数时,
AVG()
函数也会返回一个整数。请尝试以下代码:

    var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
var numberOfDays=db.ExecuteQuery(str.FirstOrDefault();

您的代码必须更改为:

var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault());
var numberOfDays=db.ExecuteQuery(str.FirstOrDefault());
你觉得为什么?我告诉你:

DateDiff的返回类型为int。因此AVG的返回类型将为int。因此IsNULL的返回类型也将为int

参考文献:


IsNull始终尝试将第二个表达式的类型转换为第一个表达式。

您的代码必须更改为:

var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault());
var numberOfDays=db.ExecuteQuery(str.FirstOrDefault());
你觉得为什么?我告诉你:

DateDiff的返回类型为int。因此AVG的返回类型将为int。因此IsNULL的返回类型也将为int

参考文献:


IsNull始终尝试将第二个表达式的类型转换为第一个表达式。

接受其他用户的答案,而不是你自己。@AgentFire:如果你花时间注意帖子时间,你会看到我在其他答案之前就计算了它。接受其他用户的答案,而不是你自己。@AgentFire:如果你花时间注意帖子时间,你会发现我比其他人先想到了。