поле <t>неверное приведение - PullRequest
1 голос
/ 30 апреля 2010

У меня проблемы при использовании linq для datatable.asenumerable ().
Это вызывает InvalidCastException.

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

Это отлично работает.

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

Что мне не хватает?

С уважением, Свен

Ответы [ 3 ]

1 голос
/ 30 апреля 2010

Почему вы ожидаете, что это сработает? Следующий код не компилируется:

DateTime dt1 = (DateTime)"2004-01-01";

Принимая во внимание, что это делает:

DateTime dt1 = DateTime.Parse("2004-01-01");

Таким образом, вы не можете просто привести строку к DateTime, поэтому, если ваше значение является строкой, вам нужно явно преобразовать ее.

0 голосов
/ 30 апреля 2010

Литые работы между родственными типами. string и date не принадлежат к одной иерархии и, следовательно, прямой перевод невозможен.

Вы можете использовать приведение, когда вы уверены, что типы связаны и конвертация возможна.

Parse отличается от заклинания.
то есть вы указываете среде выполнения, чтобы посмотреть, можно ли ее проанализировать, чтобы сделать из нее дату (в соответствии с вашим примером).

0 голосов
/ 30 апреля 2010

Вы уверены, что ваш столбец "date" имеет тип 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());
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...