i have 2 dates (deliverydate , emptydate) fields on document want query using same date. if query 2016-04-04 , date in either deliverydate or emptydate query should return document.
beside these fields severale of other filters query this:
var query = _documentsession.advanced.documentquery<order, ordersindexfields>() .usingdefaultoperator(queryoperator.and); query.wherebetweenorequal(ordersindexfields.deliveryinfo_deliverydateutc, predicate.localdeliveryfrom.value, predicate.localdeliveryto.value); query.orelse().wherebetweenorequal(ordersindexfields.emptyorderdonedate, predicate.localdeliveryfrom.value, predicate.localdeliveryto.value); query.whereequals(ordersindexfields.status, predicate.status); query .skip(0).take(1024) .toarray();
the problem orelse() method i'm using not work expected. above query returns many results.
how write proper or statement in ravendb query?
after don't know how many hours used fixed stumpled on ravendb openclause example. have been googling after ravendb inner statement , turns out ravendb calls them subclause :d. how solved issue.
so code above works using open , end subclause methods on ravendb documentquery api:
query.opensubclause(); query.wherebetweenorequal(ordersindexfields.deliveryinfo_deliverydateutc, predicate.localdeliveryfrom.value, predicate.localdeliveryto.value); query.orelse().wherebetweenorequal(ordersindexfields.emptyorderdonedate, predicate.localdeliveryfrom.value, predicate.localdeliveryto.value); query.closesubclause();
this adds parentheses around "inner or statement" in lucene query. before query looked this:
deliveryinfo_deliverydateutc:[2016-03-31t22:00:00.0000000z 2016-04-27t22:00:00.0000000z] or emptyorderdonedate:[2016-03-31t22:00:00.0000000z 2016-04-27t22:00:00.0000000z] , status:none
and after adding open end subclause looks giving me expected result:
(deliveryinfo_deliverydateutc:[2016-03-31t22:00:00.0000000z 2016-04-27t22:00:00.0000000z] or emptyorderdonedate:[2016-03-31t22:00:00.0000000z 2016-04-27t22:00:00.0000000z]) , status:none
Comments
Post a Comment