예제 #1
0
 private DataTablesPropertyInfo FindColumn(DataTablesParam dtParameters, DataTablesPropertyInfo[] columns, int i)
 {
     if (dtParameters.sColumnNames.Any())
     {
         return(columns.First(x => x.PropertyInfo.Name == dtParameters.sColumnNames[i]));
     }
     else
     {
         return(columns[i]);
     }
 }
예제 #2
0
        public static async Task <DataTablesResponseData> GetDataTableResponseAsync <TSource>(this IQueryable <TSource> data, DataTablesParam param, Action <TSource> postQueryTransform, bool disablePaging = false)
        {
            var filters          = new DataTablesFiltering();
            var outputProperties = DataTablesTypeInfo <TSource> .Properties;

            List <TSource> queryResult;
            var            totalDisplayRecords = 0;
            var            filteredData        = filters.ApplyFiltersAndSort(param, data, outputProperties);

            if (!disablePaging)
            {
                totalDisplayRecords = await filteredData.CountAsync();

                var skipped = filteredData.Skip(param.iDisplayStart);
                queryResult = await(param.iDisplayLength <= 0 ? skipped : skipped.Take(param.iDisplayLength)).ToListAsync();
            }
            else
            {
                queryResult = await filteredData.ToListAsync();

                totalDisplayRecords = queryResult.Count();
            }

            queryResult.ForEach(postQueryTransform);

            var result = new DataTablesResponseData()
            {
                iTotalRecords        = totalDisplayRecords,
                iTotalDisplayRecords = totalDisplayRecords,
                sEcho  = param.sEcho,
                aaData = queryResult.Cast <object>().ToArray(),
            };

            var responseOptions = new ResponseOptions <TSource> {
                ArrayOutputType = null
            };
            var dictionaryTransform = DataTablesTypeInfo <TSource> .ToDictionary(responseOptions);

            result = result.Transform(dictionaryTransform).Transform <Dictionary <string, object>, Dictionary <string, object> >(StringTransformers.StringifyValues);
            result = ApplyOutputRules(result, responseOptions);
            return(result);
        }
예제 #3
0
        public IQueryable <T> ApplyFiltersAndSort <T>(DataTablesParam dtParameters, IQueryable <T> data, DataTablesPropertyInfo[] columns)
        {
            if (!String.IsNullOrEmpty(dtParameters.sSearch))
            {
                var parts      = new List <string>();
                var parameters = new List <object>();
                for (var i = 0; i < dtParameters.iColumns; i++)
                {
                    if (dtParameters.bSearchable[i])
                    {
                        try
                        {
                            parts.Add(GetFilterClause(dtParameters.sSearch, columns[i], parameters));
                        }
                        catch (Exception)
                        {
                            //if the clause doesn't work, skip it!
                        }
                    }
                }
                var values = parts.Where(p => p != null);
                data = data.Where(string.Join(" or ", values), parameters.ToArray());
            }
            for (int i = 0; i < dtParameters.sSearchValues.Count; i++)
            {
                if (dtParameters.bSearchable[i])
                {
                    var searchColumn = dtParameters.sSearchValues[i];
                    if (!string.IsNullOrWhiteSpace(searchColumn))
                    {
                        DataTablesPropertyInfo column = FindColumn(dtParameters, columns, i);
                        var parameters   = new List <object>();
                        var filterClause = GetFilterClause(searchColumn, column, parameters);
                        if (string.IsNullOrWhiteSpace(filterClause) == false)
                        {
                            data = data.Where(filterClause, parameters.ToArray());
                        }
                    }
                }
            }
            string sortString = "";

            for (int i = 0; i < dtParameters.iSortingCols; i++)
            {
                int columnNumber = dtParameters.iSortCol[i];
                DataTablesPropertyInfo column = FindColumn(dtParameters, columns, columnNumber);
                string columnName             = column.PropertyInfo.Name;
                string sortDir = dtParameters.sSortDir[i];
                if (i != 0)
                {
                    sortString += ", ";
                }
                sortString += columnName + " " + sortDir;
            }
            if (!string.IsNullOrWhiteSpace(sortString))
            {
                data = data.OrderBy(sortString);
            }

            return(data);
        }
예제 #4
0
        public static async Task <IEnumerable <TSource> > GetObjectResponseAsync <TSource>(this IQueryable <TSource> data, DataTablesParam param)
        {
            var filters          = new DataTablesFiltering();
            var outputProperties = DataTablesTypeInfo <TSource> .Properties;
            var filteredData     = filters.ApplyFiltersAndSort(param, data, outputProperties);
            var queryResult      = await filteredData.ToListAsync();

            return(queryResult);
        }