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.

我做错了什么?

提前感谢!

LINQ to SQL 运行标量值的直接 SQL

您的代码必须更改为:

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();