/// <summary> /// Gets the data using the specified <paramref name="args"/>. /// NOTE: Only root types are returned by this method! /// </summary> /// <param name="args">The args</param> /// <returns></returns> public override async Task <IFailable <IEnumerable> > GetDataAsync(DataGridPresenterArgs args) { // Create the result var result = new Failable <IEnumerable>(); try { var queryable = GetDataQuery; // Get the data model type var dataModelType = PresenterMap.QueryMap.RootType; // If there is a date column... if (DataGridMap.DateColumn != null) { // If there is an after date... if (args.After != null) { // Add a where condition queryable = CeidDiplomatikiHelpers.AddWhereCondition(queryable, dataModelType, ExpressionHelpers.CreatePropertyEqualityExpression(dataModelType, DataGridMap.DateColumn, args.After.Value.DateTime, NumericEqualityOperator.GreaterOrEqualThan)); } // If there is a before date... if (args.Before != null) { // Add a where condition queryable = CeidDiplomatikiHelpers.AddWhereCondition(queryable, dataModelType, ExpressionHelpers.CreatePropertyEqualityExpression(dataModelType, DataGridMap.DateColumn, args.Before.Value.DateTime, NumericEqualityOperator.LessOrEqualThan)); } } // If there is a search value... if (!args.Search.IsNullOrEmpty()) { // If there are search column... if (!DataGridMap.SearchColumns.IsNullOrEmpty()) { var parameterExp = Expression.Parameter(dataModelType, "x"); var methodCallExpressions = new List <MethodCallExpression>(); // For every search column... foreach (var searchColumn in DataGridMap.SearchColumns) { var expr = CreateContainsExpression(parameterExp, dataModelType, searchColumn, args.Search); methodCallExpressions.Add(expr); } Expression orExpression = null; foreach (var expr in methodCallExpressions) { if (orExpression == null) { orExpression = expr; continue; } orExpression = Expression.OrElse(orExpression, expr); } var lambda = Expression.Lambda(typeof(Func <,>).MakeGenericType(dataModelType, typeof(bool)), orExpression, parameterExp); queryable = CeidDiplomatikiHelpers.AddWhereCondition(queryable, dataModelType, lambda); } } // Add the order by condition queryable = CeidDiplomatikiHelpers.AddOrderByDescendinCondition(queryable, dataModelType, PrimaryKeyProperty); // Add the skip condition queryable = CeidDiplomatikiHelpers.AddSkipCondition(queryable, dataModelType, args.Page * args.PerPage); // Add the take condition queryable = CeidDiplomatikiHelpers.AddTakeCondition(queryable, dataModelType, args.PerPage); // Get the models var models = await CeidDiplomatikiHelpers.ExecuteToListAsync(queryable, dataModelType); // Set the data result.Result = models; } catch (Exception ex) { // If there was an error... result.ErrorMessage = ex.Message; } // Return the result return(result); }