DataTable to EnumerableRowCollection - PullRequest
1 голос
/ 23 июля 2010

У меня есть DataTable в соответствии с требованием клиента, оно может содержать недопустимую дату, скажем, «00/00/1999», NULL, пустая строка. (Typed DatSet)

Когда я собираю их как перечисляемые, я хочупреобразовать любую из этих недопустимых форм в пустую строку.

(то есть)

 EnumerableRowCollection<DataRow> query = 
    from order in _table.AsEnumerable()
    select 
   new {
        OrderDate= 
        string.IsNullorEmpty(Convert.ToString(order.Field<DateTime>("OrderDate"))
        || 
        (How to check Date is Invalid  date)
         ? String.Empty : order.Field<DateTime>("OrderDate") 
        }

Как проверить, является ли Дата действительной датой или нет?

Ответы [ 3 ]

2 голосов
/ 24 июля 2010

DateTime.TryParse ... как это с учетом вашего текущего кода:

 DateTime date;
 EnumerableRowCollection<DataRow> query = 

    from order in _table.AsEnumerable()
    select 
   new {
        OrderDate= 
        string.IsNullorEmpty(Convert.ToString(order.Field<DateTime>("OrderDate"))
        || 
        !DateTime.TryParse(Convert.ToString(order.Field<DateTime>("OrderDate")),out date)
         ? string.Empty : date.ToShortDateString() 
        }

(используя блокнот для IDE, поэтому извиняюсь за синтаксическую ошибку, но это должно дать вам общее представление)

Я предполагаю, что OrderDate является строкой, так как вы пытаетесь присвоить ей string.Empty, если это DateTime, тогда измените троичное назначение на что-то вроде DateTime.MinValue вместо пустой строки (или чего бы вы не хотелииспользуйте для «недопустимых» дат, так как пустая строка больше не является опцией):

? DateTime.MinValue:date

или если OrderDate имеет значение DateTime, допускающее значение NULL, то

? null:date
0 голосов
/ 30 мая 2015

Вот более краткий ответ.

var badDate = DateTime.Parse("01/01/1999");
var query = 
    from order in _table.AsEnumerable()
    select new {
        OrderDate = (order.Field<DateTime>("OrderDate").Date == badDate.Date) ? String.Empty : date.ToShortDateString()
    };

ПРИМЕЧАНИЕ. Невозможно сохранить «00/00/1999» в качестве временного типа в реляционной базе данных.Я думаю, что вы имели в виду "01.01.1999" как значение дозорного.

0 голосов
/ 04 августа 2010

Я думаю, что ответ Кекекелы правильный, но он кажется неэффективным из-за ненужного дублирования.Я бы посоветовал:

 DateTime date;
 EnumerableRowCollection<DataRow> query = 

 from order in _table.AsEnumerable()
 select 
   new {
        OrderDate = 
          !DateTime.TryParse(Convert.ToString(
              order.Field<DateTime>("OrderDate")), out date)
          ? String.Empty : date.ToShortDateString()
       }

Ключевым моментом здесь является то, что TryParse не бросает ноль или пусто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...