В моем упрощенном примере у меня есть объект со следующими свойствами:
- Имя (строка)
- BirthDateTimeStamp (дата/время)
Мне нужно уметь строить динамические запросы следующим образом
var predicate = "Name = @0";
var values = new object[]{"Ed"};
myIQueryableDataSource.Where(predicate, values)
Эта работа хорошая. Теперь я хочу сравнить дату и время
var predicate = "BirthDateTimeStamp >= @0";
var values = new object[]{someDateTime};
Это тоже хорошо работает. Но то, что я на самом деле хочу сделать при сравнении даты и времени, и эта проблема лучше проявляется при выполнении равных, сравнивается только по дате.
var predicate = "BirthDateTimeStamp.Date >= @0";
Это невозможно, так как свойство Date не распознается EF для SQL-сервера.
var predicate = "System.Data.Entity.DbFunctions.TruncateTime(BirthDateTimeStamp) >= @0";
Это также не работает, так как я могу получить доступ к своим свойствам объекта только в предикате.
Как я могу решить это таким образом, чтобы предикат оставался в строковом формате. Этот код является лишь частью большого существующего синтаксического анализатора для моих запросов и может быть полностью переписан.