Home > Blockchain >  C# MongoDb Driver Convert string to DateTime and for Filter Builder
C# MongoDb Driver Convert string to DateTime and for Filter Builder

Time:03-10

 var builder = Builders<ModelClass>.Filter;
 var filter = builder.Where(x => x.Active);

if (fromDate.HasValue)
        {
            var date = fromDate.Value;
            var subfilter = builder.Where(x =>DateTime.Parse(x.EnrollmentDate) >= date);
            filter &= subfilter;
        }

Enrolment Date is Saved as a string public string EnrollmentDate{ get; set; }, I need to Filter Docs within a Set Date Range, But How do i Compare this? i need to filter like this,

I get System.InvalidOperationException: Parse({document}{EnrollmentDate}) is not supported. Error in SubFilter Line

CodePudding user response:

You have problem here when you want to do DateTime.Parse()

Can you post format of your string EnrollmentDate? And your variable date , is it only Date or DateTime?

This one maybe can help you here

Also, try to use

var subfilter = builder.Gte(x=>x.Y, Z) 

CodePudding user response:

I think you need to achieve with MongoDB query as below:

{
  "$expr": {
    "$gte": [
      { "$toDate": "$EnrollmentDate" },
      date
    ]
  }
}

While I think it is not achievable with MongoDB .Net Driver LINQ syntax, you convert the query as BsonDocument:

var subfilter = new BsonDocument("$expr",
    new BsonDocument("$gte", 
        new BsonArray {
            new BsonDocument("$toDate", "$EnrollmentDate"),
            date
        }
    )
);

filter &= subfilter;
  • Related