自定义Linq to Sql查询中的ExecuteScalar()模拟

时间:2011-03-21 14:55:52

标签: .net sql sql-server linq-to-sql

我需要执行一个自定义的SQL查询,我无法用常规的L2S进行操作:

select [row_number] from (select row_number() over (order by CreatedOn desc, ID desc) as [row_number], ID from MyTable) as T1 where ID = {0}

所以我正在尝试

var r = db.ExecuteQuery<int>(q, id).Single();

但这不起作用(获取System.InvalidCastException:指定的强制转换无效)。有什么建议吗?

2 个答案:

答案 0 :(得分:7)

将您的代码更改为:

var r = db.ExecuteQuery<long>(q, id).Single();

将返回类型从System.Int32int)更改为System.Int64long)。

T-SQL函数ROW_NUMBER返回类型为bigint,而不是您预期的int

答案 1 :(得分:0)

您可以尝试从

更改代码
int recordsAffected = SqlDBUtils.GetInt(dr, "SerialNumber");

int recordsAffected = SqlDBUtils.GetInt64(dr, "SerialNumber");

因为SQL中的ROW_NUMBER()函数返回BigInt而不是Int