field <t>无效演员</t>

时间:2010-04-30 06:31:18

标签: c# linq datatable

我在datatable.asenumerable()上使用linq时遇到问题 这会抛出InvalidCastException。

DateTime date=r.Field<DateTime>("date");

这很好用。

DateTime date = DateTime.Parse(r.Field<string>("date"));

我错过了什么?

关心Sven

3 个答案:

答案 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在相关类型之间工作。 stringdate不属于同一层次结构&amp;因此无法直接翻译。

如果您确定类型是相关的并且可以进行转换,则可以使用强制转换。

Parse与演员不同 即告诉运行时要查看它是否可以解析它(根据你的例子)。