从物化的“System.DateTime”类型到“System.String”类型的指定强制转换无效

时间:2014-05-28 14:28:05

标签: c# asp.net entity-framework

我正在使用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'类型无效。

任何想法为什么?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

当您使用Database.SqlQuery<T>时,会启用例外目标:T GetValue(System.Data.Common.DbDataReader, DateTime)

在此案例中检查您的实体类T SRVM 您会找到string类型的IDate字段,其类型应为Datetime

public string IDate { get; set; }

public Datetime IDate { get; set; }