(репликация моего комментария для вставки примера кода)
Если дата в строковом формате, не могли бы вы применить ToString
к вашему DateTime
(предположительно x
), а затем выполнить сравнение строк?
Поскольку вы работаете с строковыми представлениями, вам нужно позаботиться о нескольких проблемах, которые иначе были бы прозрачно обработаны DateTime
, включая:
- Расхождения в формате даты и времени (
dd/MM/yyyy
против MM/dd/yyyy
).
- Наличие или отсутствие начальных нулей для однозначных дней и месяцев (например,
01/01/2011
против 1/1/2001
).
- Двузначное или четырехзначное представление года (например,
01/01/2011
против 01/01/11
).
- Смещение часового пояса. Например, дата для
2011-01-01 23:30 -01:00
будет фактически 2011-01-02
.
Пример кода ниже будет работать, если все ваши даты в американском формате, с двузначными днями и месяцами, четырехзначными годами и без смещения часового пояса.
from t1 in Table1
where t1.Value.StartsWith(x.ToString(@"MM\/dd\/yyyy"))
select new {t1.Col1, t1.Col2};
Редактировать : Альтернативное решение:
Если вы можете определить представление в своей базе данных, вы можете обойти проблему, выборочно приведя ваш VARCHAR
к DATETIME
. Я предполагаю, что Value
- это название вашего столбца даты.
SELECT CONVERT(DATE, Value, 101) AS Value, Col1, Col2
FROM Table1
WHERE ISDATE(Value) = 1
Затем в вашем LINQ выполните простую DateTime
проверку на равенство:
from t1 in Table1
where t1.Value == x.Date
select new {t1.Col1, t1.Col2};