【问题标题】:The specified cast from a materialized 'System.DateTime' type to the 'System.String' type is not valid从具体化的“System.DateTime”类型到“System.String”类型的指定转换无效
【发布时间】:2014-05-28 14:28:05
【问题描述】:

我正在使用 Entity Framework 5,并且当从下面调用 count() 时

string sqlStr = @"SELECT top 20 ID, 
               CAST(DOI as DATETIME) as IDate
               FROM DTable";

var results = db.Database.SqlQuery<SRVM>(sqlStr);


//get total count
var total = results.Count();

我得到错误:

从具体化的“System.DateTime”类型到指定的转换 “System.String”类型无效。

有什么想法吗?

【问题讨论】:

  • 张贴上面的行
  • 您缺少相关的代码部分。我们无法推断results 类型是什么。发布它的声明,因为它非常相关......
  • 你有一些来自 db 的列是 DateTime 类型,但这里的属性是字符串

标签: c# asp.net entity-framework


【解决方案1】:

看起来您正在将 DateTime 放入 linq 查询中的字符串变量中。我还猜测查询的第一个是“results.Count()”,它实际上正在执行查询并尝试填充您正在填充的任何对象。如果将 Count() 调用更改为将执行调用的任何方法(ToList()、First()、...),您将看到相同的错误。

当您将 DateTime 投影到字符串匹配时,请确保您使用格式提供程序调用 ToString() 来进行转换。

【讨论】:

    【解决方案2】:

    当您使用Database.SqlQuery&lt;T&gt; 时,异常目标站点为:T GetValue(System.Data.Common.DbDataReader, DateTime)

    在这种情况下查看您的实体类 T 是 SRVM,您会发现 string 类型的 IDate 字段应该是 Datetime 类型。

    public string IDate { get; set; }
    

    public Datetime IDate { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      相关资源
      最近更新 更多