示例#1
0
        private DataTable ProcessDataTable(DataTable dataTable, IEnumerable <Filter> outerFilters = null, IEnumerable <IColumn> columns = null)
        {
            if (dataTable == null || dataTable.Rows.Count == 0)
            {
                return(dataTable);
            }

            DataTable dt = dataTable;

            //Apply sorting
            if (columns != null && columns.Any())
            {
                dt = dt.OrderBy(columns);
            }

            //Apply sent filter here
            if (outerFilters != null && outerFilters.Any())
            {
                string predicate = ReportFilterHelper.BuildOuterPredicate(outerFilters);
                if (string.IsNullOrEmpty(predicate))
                {
                    return(dt);
                }

                var filteredResult = dt.Select(predicate);
                var dtc            = dataTable.Clone();
                dtc.CopyToDataTable(filteredResult);

                //copy filtered dt to result
                dt = dtc;
            }

            return(dt);
        }
示例#2
0
        private string ProcessQuery(string query, IEnumerable <Filter> innerFilters = null)
        {
            if (innerFilters == null)
            {
                return(query);
            }

            var q = query;

            //Apply inner filters from filters
            foreach (var innerFilter in innerFilters)
            {
                var filterQuery = innerFilter.Value != null?ReportFilterHelper.BuildPredicate(innerFilter) : "";

                q = q.Replace("@" + innerFilter.ParameterName, filterQuery);
            }

            return(q);
        }