2014-11-19 2 views
2

Я имею (скорее всего тривиальная задача) при сравнении строк в C#преобразования ToString в C# LINQ запрос

Я выполняющей этот запрос LINQ

var result = from q in Table 
      where q.ValueDate.ToString() == "12/11/2014 12:00:00 AM" 
      select q; 

и получить пустой ответ

Однако, когда я пытаюсь

foreach (var i in Table) 
{ 
    Console.WriteLine(i.ValueDate.ToString()); 
} 

Я получаю

12/11/2014 12:00:00 AM 
12/11/2014 12:00:00 AM 
12/11/2014 12:00:00 AM 
12/11/2014 12:00:00 AM 

Что я здесь делаю неправильно?

+3

Вместо сравнения 'ToString()' вывод в 'DateTime' собственности на другую дату строку, разобрать вашу строку даты в' DateTime' и сделать 'DateTime' сравнение , –

+1

@BenRobinson [комментарии не для ответов] (http://meta.workplace.stackexchange.com/a/1866). Вместо этого ваш комментарий мог бы быть ответом. – Default

ответ

3

Я не пожертвует типобезопасность из Date, преобразуя его в строку - то, что возможно происходит, состоит в том, что ToString() преобразуется в * C har типа через CAST/CONVERT в БД, что приводит к другому формату. Вот как бы я это сделать:

var checkDateTime = new DateTime(2014, 11, 12); 
var result = from q in Table 
      where q.ValueDate == checkDateTime 
      select q; 
0

Вы можете использовать DateTime объект а не делать сравнения строк:

DateTime filter = new DateTime(2014,12,11); 
var result = from q in Table 
       where q.ValueDate == filter) 
       select q 

или попробуйте указать свой формат даты:

var result = from q in Table 
       where q.ValueDate.ToString("dd/MM/yyyy hh:mm:ss tt") == "12/11/2014 12:00:00 AM" 
       select q; 

See Attached Fiddle Example

+1

Не нужно ToString() больше? – Reniuz

Смежные вопросы