我在datatable.asenumerable()上使用linq时遇到问题 这会抛出InvalidCastException。
DateTime date=r.Field<DateTime>("date");
这很好用。
DateTime date = DateTime.Parse(r.Field<string>("date"));
我错过了什么?
关心Sven
答案 0 :(得分:1)
为什么你期望它能起作用?以下代码无法编译:
DateTime dt1 = (DateTime)"2004-01-01";
这样做:
DateTime dt1 = DateTime.Parse("2004-01-01");
在中,您不能只是将字符串转换为DateTime,因此如果您的值是字符串,则需要显式转换它。
答案 1 :(得分:0)
您确定“日期”列的类型是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());
}
答案 2 :(得分:0)
Cast在相关类型之间工作。 string
和date
不属于同一层次结构&amp;因此无法直接翻译。
如果您确定类型是相关的并且可以进行转换,则可以使用强制转换。
Parse
与演员不同
即告诉运行时要查看它是否可以解析它(根据你的例子)。