protected internal override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments) { ClearOriginalValues(); QueryContext queryContext = CreateQueryContext(arguments); object table = GetSource(queryContext); IList result = null; if (_selectResult != null) { try { IQueryable query = QueryableDataSourceHelper.AsQueryable(_selectResult); query = ExecuteQuery(query, queryContext); Type dataObjectType = GetDataObjectType(query.GetType()); result = query.ToList(dataObjectType); if (_storeOriginalValues) { ITable dlinqTable = table as ITable; // We can store original values if the type is exact or derived if ((dlinqTable != null) && dataObjectType.IsAssignableFrom(EntityType)) { StoreOriginalValues(result); } } } catch (Exception e) { result = null; LinqDataSourceStatusEventArgs selectedEventArgs = new LinqDataSourceStatusEventArgs(e); OnSelected(selectedEventArgs); OnException(new DynamicValidatorEventArgs(e, DynamicDataSourceOperation.Select)); if (!selectedEventArgs.ExceptionHandled) { throw; } } finally { if (result != null) { int totalRowCount = -1; // paging performed, but row count not available. if (arguments.RetrieveTotalRowCount) { totalRowCount = arguments.TotalRowCount; } else if (!AutoPage) { totalRowCount = result.Count; } LinqDataSourceStatusEventArgs selectedEventArgs = new LinqDataSourceStatusEventArgs(result, totalRowCount); OnSelected(selectedEventArgs); } } // Null out the select context Context = null; } return(result); }
/// <summary> /// Creates a select expression based on parameters and properties /// </summary> protected virtual IQueryable BuildQuery(DataSourceSelectArguments arguments) { if (arguments == null) { throw new ArgumentNullException("arguments"); } // Create the query context QueryContext context = CreateQueryContext(arguments); // Clear out old values before selecting new data _originalValues = null; // Get the source of the query(root IQueryable) object result = GetSource(context); if (result != null) { IQueryable source = QueryableDataSourceHelper.AsQueryable(result); // Apply additional filterting return(ExecuteQuery(source, context)); } return(null); }