LINQ to SQL 运行标量值的直接 SQL
本文关键字:SQL 标量 to 运行 LINQ | 更新日期: 2023-09-27 17:56:09
我正在尝试执行以下原始 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.
我做错了什么?
提前感谢!
您的代码必须更改为:
var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault());
你想为什么?我告诉你:
在 int 中返回 DateDiff 的类型。因此,AVG 的返回类型将是 int。所以 IsNULL 的返回类型也将是 int。
引用:
日期差异平均
IsNull 始终尝试将第二个表达式的类型转换为第一个表达式。
好吧,我的错。
看来演员阵容确实错了...将行更改为:
var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
一切都很好!
DATEDIFF()
返回一个int
。传递整数集合时,AVG()
函数也会返回整数。请尝试以下代码:
var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();