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
        private bool OriginalValueMatches(object originalValue, object value)
        {
            // NOTE: Comparing IEnumerable contents instead of instances to ensure that
            // timestamp columns (of type byte[]) can be matched appropriately.
            IEnumerable originalValueEnumerable = originalValue as IEnumerable;
            IEnumerable valueEnumerable         = value as IEnumerable;

            if ((originalValueEnumerable != null) && (valueEnumerable != null))
            {
                return(QueryableDataSourceHelper.EnumerableContentEquals(originalValueEnumerable, valueEnumerable));
            }
            return(originalValue.Equals(value));
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        protected IQueryable ExecuteQueryExpressions(IQueryable source, QueryContext context)
        {
            if (source != null)
            {
                QueryCreatedEventArgs queryArgs = new QueryCreatedEventArgs(source);
                OnQueryCreated(queryArgs);
                source = queryArgs.Query ?? source;

                // Support the Dynamic Expression language used by LinqDataSource
                if (AutoGenerateWhereClause)
                {
                    if (!String.IsNullOrEmpty(Where))
                    {
                        throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
                                                                          AtlasWeb.LinqDataSourceView_WhereAlreadySpecified, _owner.ID));
                    }
                    source = QueryableDataSourceHelper.CreateWhereExpression(context.WhereParameters, source, _queryable);
                }
                else if (!String.IsNullOrEmpty(Where))
                {
                    source = _queryable.Where(source, Where, context.WhereParameters.ToEscapedParameterKeys(_owner));
                }

                if (AutoGenerateOrderByClause)
                {
                    if (!String.IsNullOrEmpty(OrderBy))
                    {
                        throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
                                                                          AtlasWeb.LinqDataSourceView_OrderByAlreadySpecified, _owner.ID));
                    }
                    source = QueryableDataSourceHelper.CreateOrderByExpression(context.OrderByParameters, source, _queryable);
                }
                else if (!String.IsNullOrEmpty(OrderBy))
                {
                    source = _queryable.OrderBy(source, OrderBy, context.OrderByParameters.ToEscapedParameterKeys(_owner));
                }


                string groupBy = GroupBy;
                if (String.IsNullOrEmpty(groupBy))
                {
                    if (!String.IsNullOrEmpty(OrderGroupsBy))
                    {
                        throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
                                                                          AtlasWeb.LinqDataSourceView_OrderGroupsByRequiresGroupBy, _owner.ID));
                    }
                }
                else
                {
                    source = _queryable.GroupBy(source, groupBy, "it", context.GroupByParameters.ToEscapedParameterKeys(_owner));
                    if (!String.IsNullOrEmpty(OrderGroupsBy))
                    {
                        source = _queryable.OrderBy(source, OrderGroupsBy, context.OrderGroupsByParameters.ToEscapedParameterKeys(_owner));
                    }
                }

                if (!String.IsNullOrEmpty(SelectNew))
                {
                    source = _queryable.Select(source, SelectNew, context.SelectParameters.ToEscapedParameterKeys(_owner));
                }

                return(source);
            }

            return(source);
        }