У меня была такая же проблема, потому что текущий поставщик данных Sql Server для EF пренебрегает переводом DateTime.Parse в CAST (varField As DateTime).
Так строить дерево выражений, которые могут быть успешно переведены в магазин Expression, я применил следующее, который ведет себя так же, как и следовало ожидать от сказуемого: DateTime.Parse (x.DateField) == DateConstraint
Обратите внимание, что «Клиент» объект содержит входные параметры для создания предиката для использования в: EFQuery.Where (предикат)
if (client.DateOfBirth.HasValue) // can't find a string <-> DateTime conversion syntax with EF support
{
var day = client.DateOfBirth.Value.Day.ToString().PadLeft(2, '0');
var month = client.DateOfBirth.Value.Month.ToString().PadLeft(2, '0');
var year = client.DateOfBirth.Value.Year.ToString();
// very verbose, but apparently there's no EF support for String to DateTime conversion
spec = spec.And(c => SqlFunctions.IsDate(c.DateOfBirth).HasValue && SqlFunctions.IsDate(c.DateOfBirth).Value == 1
&& c.DateOfBirth.StartsWith(day)
&& month == (c.DateOfBirth.Contains("-") || c.DateOfBirth.Contains("/")
? c.DateOfBirth.Substring(c.DateOfBirth.Contains("-") ? c.DateOfBirth.IndexOf("-") + 1 : c.DateOfBirth.Contains("/")
? c.DateOfBirth.IndexOf("/") + 1 : 0, 2) : "f")
&& c.DateOfBirth.EndsWith(year));
}
Как вы можете видеть, выше выполняет строка соответствует на день, месяц, и Year, а также ожидает представления DD/MM/YYYY (Aussie Aussie Aussie!). Его можно легко модифицировать для работы с различными представлениями даты и/или включать ограничения для компонента Time.
какая ошибка вы получаете, если таковая имеется? – BlackICE
В основном по линиям «Linq для сущностей не поддерживается (Convert.ToDateTime (String)) ...» –