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);
        }
Exemplo n.º 2
0
        /// <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);
        }