【问题标题】:ExecuteScalar() analogue in custom Linq to Sql query自定义 Linq to Sql 查询中的 ExecuteScalar() 模拟
【发布时间】:2011-03-21 14:55:52
【问题描述】:

我需要执行常规 L2S 方法无法执行的自定义 sql 查询:

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: Specified cast is not valid)。有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    将您的代码更改为:

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

    通过将返回类型从 System.Int32(int) 更改为 System.Int64 (long)。

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

    【讨论】:

      【解决方案2】:

      您可以尝试从

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 2011-04-03
        相关资源
        最近更新 更多