DateTime
Use filters to narrow down search results, or use them for database-like queries. This topic explains how to filter search results based on date/time fields, using the Filter method in Episerver Find.
How it works
Use the Filter method to filter DateTime and nullable DateTime fields in a number of ways. The following list shows use cases and examples illustrating the available methods.
Note: 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.
Existence
To search for documents where a DateTime field has a value, use the Exists method. 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());
To negate it with an exclamation mark (!) to find all blog posts with no publish date, use the code below.
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)));
Matching 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.
Last updated: Nov 16, 2015