private static void ApplySort <TEntity>(ref IQueryable <TEntity> source, CriteriaField criteriaField) where TEntity : class { IOrderedQueryable <TEntity> orderedQueryTmp; IOrderedQueryable <TEntity> orderedQuery = null; if (criteriaField != null && criteriaField.FieldSortList != null && criteriaField.FieldSortList.Count > 0) { foreach (FieldSort fieldSort in criteriaField.FieldSortList) { orderedQueryTmp = null; if (fieldSort.Sort == TFieldSort.Asc) { orderedQueryTmp = ApplyOrder(orderedQuery == null ? source : orderedQuery, fieldSort.Name, orderedQuery == null ? "OrderBy" : "ThenBy"); } else if (fieldSort.Sort == TFieldSort.Desc) { orderedQueryTmp = ApplyOrder(orderedQuery == null ? source : orderedQuery, fieldSort.Name, orderedQuery == null ? "OrderByDescending" : "ThenByDescending"); } if (orderedQueryTmp != null) { orderedQuery = orderedQueryTmp; } } } if (orderedQuery != null) { source = orderedQuery; } }
public static void CompleteQuery <TEntity>(ref TableQuery <TEntity> source, CriteriaField criteriaField) where TEntity : class { if (source == null || criteriaField == null) { return; } Expression <Func <TEntity, bool> > queryExpression = null; CompleteQueryInternal(ref queryExpression, criteriaField); if (queryExpression != null) { source = source.Where(queryExpression); } }
public static void CompleteQuery <TEntity>(ref IQueryable <TEntity> source, CriteriaField criteriaField) where TEntity : class { if (source == null || criteriaField == null) { return; } Expression <Func <TEntity, bool> > queryExpression = null; CompleteQueryInternal(ref queryExpression, criteriaField); if (queryExpression != null) { Expression <Func <TEntity, bool> > queryExpression2 = null; CompleteQueryInternal(ref queryExpression2, criteriaField); queryExpression = queryExpression.Or(queryExpression2); } if (queryExpression != null) { source = source.Where(queryExpression); } ApplySort(ref source, criteriaField); }
private static void CompleteQueryInternal <TEntity>(ref Expression <Func <TEntity, bool> > queryExpression, CriteriaField criteriaField) where TEntity : class { var criteriaFieldProperties = criteriaField.GetType().GetRuntimeProperties(); object value; string fieldName; var type = typeof(TEntity); var properties = type.GetRuntimeProperties(); if (properties != null && criteriaFieldProperties != null) { foreach (var criteriaFieldProperty in criteriaFieldProperties) { fieldName = criteriaFieldProperty.Name; value = criteriaFieldProperty.GetValue(criteriaField, null); if (value == null) { continue; } CompleteQueryWithCriteria(ref queryExpression, fieldName, value); } } }