/// <summary>Applies the filter.</summary> /// <param name="baseExpression">The base expression.</param> /// <param name="fullName">Name of the full.</param> /// <returns>A DbExpression.</returns> public DbExpression ApplyFilter(DbExpression baseExpression, string fullName) { if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName)) { var filters = InstanceFilterContext.GetGlobalApplicableFilter(fullName); var type = InstanceFilterContext.TypeByEntitySetBase[fullName]; if (filters.Count > 0) { foreach (var filter in filters) { var filterQueryEnabled = FilterQuery.IsEnabled(filter); if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) || (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type))) { continue; } var expression2 = filter.GetDbExpression(Context, type); if (expression2 != null) { var baseExpressionProperty = baseExpression as DbPropertyExpression; NavigationProperty navProp = null; if (baseExpressionProperty != null) { navProp = baseExpressionProperty.Property as NavigationProperty; } if (QueryFilterManager.AllowPropertyFilter && navProp != null && !baseExpression.ResultType.ToString().Contains("Transient.collection[")) { // Filter property expression2 = DbExpressionBuilder.Take(expression2, 1); expression2 = DbExpressionBuilder.Element(expression2); baseExpression = expression2; } else { var visitor = new QueryFilterInterceptorDbProjectExpression(); visitor.DbScanExpression = baseExpression; visitor.ParameterCollection = QueryFilterManager.DbExpressionParameterByHook[expression2]; var filetered = expression2.Accept(visitor); baseExpression = filetered; } } } } } if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName)) { var filters = InstanceFilterContext.GetApplicableFilter(fullName); var type = InstanceFilterContext.TypeByEntitySetBase[fullName]; if (filters.Count > 0) { foreach (var filter in filters) { var filterQueryEnabled = FilterQuery.IsEnabled(filter); if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) || (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type))) { continue; } var expression2 = filter.GetDbExpression(Context, type); if (expression2 != null) { var baseExpressionProperty = baseExpression as DbPropertyExpression; NavigationProperty navProp = null; if (baseExpressionProperty != null) { navProp = baseExpressionProperty.Property as NavigationProperty; } if (QueryFilterManager.AllowPropertyFilter && navProp != null && !baseExpression.ResultType.ToString().Contains("Transient.collection[")) { // Filter property expression2 = DbExpressionBuilder.Take(expression2, 1); expression2 = DbExpressionBuilder.Element(expression2); baseExpression = expression2; } else { var visitor = new QueryFilterInterceptorDbProjectExpression(); visitor.DbScanExpression = baseExpression; visitor.ParameterCollection = QueryFilterManager.DbExpressionParameterByHook[expression2]; var filetered = expression2.Accept(visitor); baseExpression = filetered; } } } } } return(baseExpression); }
/// <summary>Applies the filter.</summary> /// <param name="baseExpression">The base expression.</param> /// <param name="fullName">Name of the full.</param> /// <returns>A DbExpression.</returns> public DbExpression ApplyFilter(DbExpression baseExpression, string fullName) { if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName)) { var filters = InstanceFilterContext.GetGlobalApplicableFilter(fullName); var type = InstanceFilterContext.TypeByEntitySetBase[fullName]; if (filters.Count > 0) { foreach (var filter in filters) { var filterQueryEnabled = FilterQuery.IsEnabled(filter); if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) || (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type))) { continue; } var expression2 = filter.GetDbExpression(Context, type); if (expression2 != null) { var visitor = new QueryFilterInterceptorDbProjectExpression(); visitor.DbScanExpression = baseExpression; var filetered = expression2.Accept(visitor); baseExpression = filetered; } } } } if (InstanceFilterContext.TypeByEntitySetBase.ContainsKey(fullName)) { var filters = InstanceFilterContext.GetApplicableFilter(fullName); var type = InstanceFilterContext.TypeByEntitySetBase[fullName]; if (filters.Count > 0) { foreach (var filter in filters) { var filterQueryEnabled = FilterQuery.IsEnabled(filter); if ((filterQueryEnabled.HasValue && !filterQueryEnabled.Value) || (!filterQueryEnabled.HasValue && !filter.IsTypeEnabled(type))) { continue; } var expression2 = filter.GetDbExpression(Context, type); if (expression2 != null) { var visitor = new QueryFilterInterceptorDbProjectExpression(); visitor.DbScanExpression = baseExpression; visitor.ParameterCollection = QueryFilterManager.DbExpressionParameterByHook[expression2]; var filetered = expression2.Accept(visitor); baseExpression = filetered; } } } } return(baseExpression); }