Linq "无法强制转换类型为'System.DateTime'键入'System.S
本文关键字:System 键入 类型 DateTime quot Linq 转换 | 更新日期: 2023-09-27 18:15:43
我正在使用linq从数据库中提取一些信息。
Sql脚本: TYPE CURS IS REF CURSOR;
CREATE OR REPLACE
PROCEDURE PROCEDURE_NAME (
Cursor1 OUT CURS)
AS
BEGIN
OPEN Cursor1 FOR
SELECT NO, TITLE, TO_CHAR(STARTDATE) STARTDATE
FROM TABLE_1;
END;
Linq代码:
var query = from e in getItem().AsEnumerable()
select new {
No = e.Field<string>("NO"),
Title = e.Field<string>("TITLE"),
StartDate = e.Field<string>("STARTDATE")
};
return query.Select(e => new ClassA()
{
No = e.No,
Title = e.Title,
StartDate = e.StartDate
}).ToList<ClassA>();
甲级:
public class ClassA {
public string No { get; set; }
public string Title { get; set; }
public string StartDate { get; set; }
}
getItem ():
public DataTable getItem() {
OracleDataAdapter da = new OracleDataAdapter();
DataSet ds = new DataSet();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = "PROCEDURE_NAME";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("Cursor1", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
da.SelectCommand = cmd;
da.Fill(ds);
return ds.Tables[0];
}
但是查询总是返回我错误Unable to cast object of type 'System.DateTime' to type 'System.String'.
,但我已经检查STARTDATE被提取为System.String。如何解决这个问题?我受不了了。
(更新)
它现在工作了,我将STARTDATE的所有数据类型更改为DateTime
,并从数据库中提取它而不进行转换。
但是,我仍然不明白为什么会出现错误
为了得到这个问题的正式答案,我将把所有者的答案贴在这里。(如果所有者在这里包含他的答案,我将删除此内容)。
(更新)它现在工作,我改变所有的数据类型的STARTDATE为DateTime和提取它从数据库没有转换。
在存储过程中,删除TO_CHAR函数。这个函数将把datetime列转换为varchar2列。
TYPE CURS IS REF CURSOR;
CREATE OR REPLACE
PROCEDURE PROCEDURE_NAME (
Cursor1 OUT CURS)
AS
BEGIN
OPEN Cursor1 FOR
SELECT NO, TITLE, STARTDATE
FROM TABLE_1;
END;