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

pir*_*ris 6 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();
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

有什么想法吗?

Fra*_*ran 5

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

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


Old*_*ain 5

当您使用Database.SqlQuery<T>异常 targetsite is on 时:T GetValue(System.Data.Common.DbDataReader, DateTime)

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

public string IDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

public Datetime IDate { get; set; }
Run Code Online (Sandbox Code Playgroud)