我在使用datatable.asenumerable()上的linq时遇到问题。
这会引发InvalidCastException。字段<t> invalid cast
DateTime date=r.Field<DateTime>("date");
这工作正常。
DateTime date = DateTime.Parse(r.Field<string>("date"));
我在想什么?
问候斯文
我在使用datatable.asenumerable()上的linq时遇到问题。
这会引发InvalidCastException。字段<t> invalid cast
DateTime date=r.Field<DateTime>("date");
这工作正常。
DateTime date = DateTime.Parse(r.Field<string>("date"));
我在想什么?
问候斯文
为什么你会期望它的工作?下面的代码无法编译:
DateTime dt1 = (DateTime)"2004-01-01";
而这样做:
DateTime dt1 = DateTime.Parse("2004-01-01");
作中,你不能只投一个字符串转换为日期时间,因此,如果您的值是一个字符串,你需要明确地转换它。
你确定你的“日期”列是DateTime类型吗?
这个测试代码按预期工作:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("date", typeof(DateTime)));
for (int i = 0; i < 10; i++)
{
DataRow row = dt.NewRow();
row["date"] = DateTime.Now.AddDays(i);
dt.Rows.Add(row);
}
foreach (var r in dt.AsEnumerable())
{
DateTime d = r.Field<DateTime>("date"); // no problems here!
Console.Write(d.ToLongDateString());
}
没有列是一个字符串,我的错误。 – Zwempha 2010-04-30 06:45:50
Cast支援相关类型之间。 string
和date
不属于同一层次&因此不可能直接翻译。
如果您确定这些类型是相关的并且可以进行转换,则可以使用强制转换。
Parse
与演员不同。
即你正在告诉运行时,看看它是否可以被解析来创建一个日期(根据你的例子)。
当你这样说的时候,这很明显。 缺乏经验和工作大脑我猜。 非常感谢! – Zwempha 2010-04-30 06:43:33