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;