i have operation takes serializable querymodel , converts expression passed entity framework. query against database looks like:
public ienumerable<photoverifysessionoverview> findsessions(expression<func<vwphotoverifysession, bool>> predicate, paginationmodel model) { var sessions = context.vwphotoverifysessions .asqueryable() .where(predicate) .orderby(string.format("{0} {1}", model.orderbycolumn, model.orderbydirection)) .skip(model.offset) .take(model.pagesize); return mapper.map<ienumerable<photoverifysessionoverview>>(sessions); } and predicate builder looks like:
var predicate = predicatebuilder.true<vwphotoverifysession>(); //add tenant clause if (model.tenantid.hasvalue) predicate.and(p => p.tenantid == model.tenantid.value); else predicate.and(p => p.tenantreferenceid == model.tenantreferenceid); //add date range if 1 present if (model.createdonrange != default(daterange)) { var enddate = model.createdonrange.end == default(datetime) ? datetime.now : model.createdonrange.end; predicate.and(p => p.createdon >= model.createdonrange.start && p.createdon <= enddate); } //include status filtering if filters present if (model.statusfilter != null && model.statusfilter.any()) { //use id , name search status predicate.and(p => model.statusfilter.any(f => f.statusid == p.statusid || p.status == f.name)); } var pagination = model paginationmodel; var sessions = manager.findsessions(predicate, pagination); return sessions; the problem is, clause not being evaluated , results being returned. there else should doing statement work correctly?
you need assign predicate itself.
predicate = predicate.and(p => p.tenantid == model.tenantid.value);
Comments
Post a Comment