C# 为标量值运行直接SQL的LINQ到SQL
我正在尝试执行以下原始SQL,因为LINQ不支持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
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:如果你花时间注意帖子时间,你会发现我比其他人先想到了。