2016-09-10 2 views
1

У меня есть база данных со строковым столбцом, который указывает значение datetime в этом формате: yyyyMMdd.C# LINQ Datetime в строковом значении

Например значение 20160908 указывают на 08 от Semptember 2016 года

У меня есть два DateTimePicker для фильтра dateFrom и значением dateTo. Беру значения даты и времени в моем Datepicker текстовое поле с этим просто код:

DateTime dataFromSel = Convert.ToDateTime(txtDatFrom.Text); 
DateTime dataToSel = Convert.ToDateTime(txtDatTo.Text); 

Мой запрос:

var query = from c in snd.WineOWines.OrderByDescending(x => x.DDT_DATA) 
    select new 
    { 
     c.ID, 
     c.VABRMA, 
     c.VABNCL, 
     c.DDT_DATA, 
    }; 

Если у меня есть DATETIME фильтр я добавить этот код:

if (txtDatDa.Text != "") 
{ 
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd"); 
    int dataDa = Convert.ToInt32(dataDaSel); 
    query = query.Where(x => int.Parse(x.DDT_DATA) >= dataDa); 
} 

Проблема в том, что я не могу перечислить запрос перед фильтром, потому что у меня много строк, и если я использую этот запрос, я не могу сделать int.parse в инструкции LINQ.

Как написать инструкцию LINQ, которая выбирает строку в моей БД с datetime между и с, если значение в столбце является строкой? Теперь мой запрос работает нормально, но мне нужно предложение where для этого проблема.

Спасибо всем

+0

LINQ to what? EF6? EF Core? Другие? –

+0

Pls поделитесь запросом здесь –

ответ

2

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

if (!string.IsNullOrEmpty(txtDatDa.Text)) 
{ 
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd"); 
    var res = query.Where(x => string.Compare(dataDaSel, x.Name) <= 0); 
} 

Linq к SQL поддерживает string.Compare (строка, строка), как описано здесь https://social.msdn.microsoft.com/Forums/en-US/98180ae0-4ccd-4ecd-89d5-576a04169219/linq-to-entities-with-string-comparison?forum=adodotnetentityframework

+0

Если я попробую, у меня есть ошибка: «невозможно применить оператор«> = »для ввода строки и строки» –

+0

Ответ изменен ... я протестировал с помощью string.compare и должен работать нормально – Grappachu

1

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

if (txtDatDa.Text != "") 
{ 
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd"); 
    query = query.Where(x => x.DDT_DATA >= dataDaSel); 
} 

E.g.

"20120201" >= "20120201" // true 
"20120101" >= "20120201" // false 
"20120301" >= "20120201" // true 

До тех пор, пока вы сохраняете формат, как yyyyMMdd он будет нормально работать даже с строкой.

+0

Если я попробую, у меня есть ошибка: «невозможно применить оператор '> =' для ввода строки и строки" –

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