【问题标题】:How to have LINQ do a CAST() in SQL Server?如何让 LINQ 在 SQL Server 中执行 CAST()?
【发布时间】:2011-10-06 21:11:22
【问题描述】:

我在 SQL Server 中有一个表,其中的条目来自:

INSERT INTO table(data) VALUES CAST(getdate() AS BINARY(8))

我想做一个将执行的 LINQ 查询:

SELECT CAST(data AS DATETIME) FROM table

我怎样才能做到这一点?

由于我无法控制的原因,日期时间在 SQL Server 中存储为二进制 (8),我需要检索日期时间。

【问题讨论】:

    标签: linq sql-server-2008 c#-4.0


    【解决方案1】:

    您可以使用模型定义的函数来实现 CAST

    http://msdn.microsoft.com/en-us/library/dd456857.aspx

    请参见此处以获取类似示例: Convert String to Int in EF 4.0

    【讨论】:

      【解决方案2】:

      sql_variant 专栏也有类似的问题。

      LINQ to SQL / EF 不支持sql_variant,因此需要一个技巧来获取使用CAST(column as your_desired_type) 生成的查询,否则LINQ to SQL 将抛出异常Unable to cast object of type 'System.Int32' to type '%your desired type%'

      因此,首先在模型中定义类型为 object 的列(而不是 string

      [System.Data.Linq.Mapping.Table]
      public class CompanyDimensionValue
      {
        // type "object" + private setter because Linq to SQL cannot map sql_variant
        [System.Data.Linq.Mapping.Column]
        public object Code { get; private set; }
      }
      

      然后在查询中添加System.Convert.ToString()

      from v in table select
        System.Convert.ToString(v.Code) // <- this generates a CAST(... as nvarchar...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-25
        • 1970-01-01
        • 2017-05-13
        相关资源
        最近更新 更多