Giancarlo
Giancarlo

Reputation: 399

Date filtering in Linq

Hi I'm trying to filter my result with a date.

What I tried so far:

var lastYear = (DateTime.Now.Year) - 1;
var salesLastYear = _documentService.GetDocuments(
              d => d.DocumentTypeId == saleDocumentId &&
              d.EffectiveOnUtc.Contains(lastYear))
             .Select(d => d.Id).ToList();

var salesLastYear = _documentService.GetDocuments(
              d => d.DocumentTypeId == saleDocumentId &&
             (d.EffectiveOnUtc.Year == lastYear))
             .Select(d => d.Id).ToList();

Both gave no errors in visual studio, but did raise an exeption during execution. Also tried to convert both the values to a string, but that also failed.

Upvotes: 0

Views: 51

Answers (1)

Richard Deeming
Richard Deeming

Reputation: 31198

Working on the assumption that your EffectiveOnUtc is a DateTime, and you want to filter to records within the previous calendar year:

int lastYear = DateTime.Now.Year - 1;
DateTime minDate = new DateTime(lastYear, 1, 1);
DateTime maxDate = minDate.AddYears(1);

var salesLastYear = _documentService.GetDocuments(
    d => d.DocumentTypeId == saleDocumentId 
    && d.EffectiveOnUtc >= minDate
    && d.EffectiveOnUtc < maxDate)
    Select(d => d.Id).ToList();

Upvotes: 2

Related Questions