OData v3 не имеет примитивного типа данных, это всего лишь Date
. У вас есть либо DateTime
, либо DateTimeOffset
, поэтому, независимо от того, используете вы его или нет, есть временная часть этого значения, и если вы хотите проверить значение для равенства, необходимо проверить компонент времени также.
Если вы точно знаете, что вы никогда не использовать временную часть (и всегда установить его до 00:00), вы могли сделать следующий запрос:
/service.svc/EntitySet?$filter=DateProperty+eq+datetime'2013-04-04'
который подразумевает временную часть 00 : 00. Но это только сокращение. И вы можете иметь неожиданные результаты, если некоторые из ваших DateTimes заканчиваются временными порциями, которые не являются 00:00.
Таким образом, учитывая, что вы просто хотите, чтобы проверить дату часть стоимости, а не полное равенство, я думаю, что второй подход вы упоминаете это лучший способ сделать это:
/service.svc/EntitySet?$filter=day(DateProperty)+eq+4+and+month(DateProperty)+eq+4+and+year(DateProperty)+eq+2013
Таким образом, вы точно проверяете, что вы хотите проверить, и ничего больше.
Для чего это стоит, я считаю, что в OData v4 находится тип данных Date
. Тогда вы сможете использовать проверку равенства, не беспокоясь о времени.
Первая часть не работает для меня в oData V3 – Matt