HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket


Filter search results based on date/time fields, using the Filter method in Optimizely Search & Navigation.

Use filters to narrow down search results, or use them for database-like queries. 

Use the Filter method to filter DateTime and nullable DateTime fields in several ways. The following list shows use cases and examples illustrating the available methods.



If you cache the search results using the built in caching functionality, you probably do not want to use DateTime.Now in your filters, because the cache key will differ for each search. In those cases, instead, normalize the DateTime value to the closest minute or, at the very least, second.


Use the Exists method to search for documents where a DateTime field has a value. The following search finds blog posts with a PublishDate property with a value. The following code is similar to the LINQ query Where(x => x.PublishDate.HasValue).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.PublishDate.Exists());

Use the code below to negate it with an exclamation point (!) to find blog posts with no publish date.

var searchQuery = client.Search<BlogPost>()
  .Filter(x => !x.PublishDate.Exists());

Exact match

For exact matching, use the Match method. The following search matches blog posts published exactly at 2010-01-01 00:00. It does not match those published 2009-12-31, 2010-01-01 01:00, or 2010-01-02. The LINQ equivalent is Where(x => x.PublishDate == new DateTime(2010, 1, 1)).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.PublishDate.Match(new DateTime(2010, 1, 1)));

Match by range

To find documents with a DateTime field whose value is within a given range, use the InRange method. The following search matches blog posts that were published between 2010-01-01 00:00 and 2010-01-02 00:00. An equivalent in LINQ is Where(x => x.PublishDate >= new DateTime(2010, 1, 1) && x.PublishDate <= new DateTime(2010, 1, 2)).

var searchQuery = client.Search<BlogPost>()
  .Filter(x => x.PublishDate.InRange(new DateTime(2010, 1, 1), new DateTime(2010, 1, 2)));

For convenience, the .NET API also features the GreaterThan, LessThan, Before, and After methods that make range filtering easier for DateTime fields.