コード例 #1
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityLoader">Loader.</param>
 /// <param name="queryable">Consulta que será realizado.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 public GetEntityDescriptorsEnumerable(IEntityLoader entityLoader, Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext)
 {
     _entityLoader  = entityLoader;
     _queryable     = queryable;
     _sourceContext = sourceContext;
     _uiContext     = uiContext;
 }
コード例 #2
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Criador dos objetos.</param>
 /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param>
 public QueryableSourceProvider(Query.Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator, Func <Query.Queryable, IEnumerable <T> > executeSelect)
 {
     _queryable     = queryable;
     _bindStrategy  = bindStrategy;
     _objectCreator = objectCreator;
     _executeSelect = executeSelect;
 }
コード例 #3
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityLoader">Loader.</param>
 /// <param name="queryable">Consulta que será realizado.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <param name="entityTypeManager">Gerenciador dos tipos de entidas.</param>
 /// <returns></returns>
 public GetEntitiesEnumerable(EntityLoader <TEntity1, Model> entityLoader, Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager)
 {
     _entityLoader      = entityLoader;
     _queryable         = queryable;
     _sourceContext     = sourceContext;
     _uiContext         = uiContext;
     _entityTypeManager = entityTypeManager;
 }
コード例 #4
0
 /// <summary>
 /// Executa a consulta que recupera uma seleção de valores.
 /// </summary>
 /// <param name="queryable"></param>
 /// <returns></returns>
 protected virtual IEnumerable <T> ExecuteSelect(Query.Queryable queryable)
 {
     if (_executeSelect != null)
     {
         return(_executeSelect(queryable));
     }
     return(queryable.Execute <T>(queryable.DataSource, _bindStrategy, _objectCreator));
 }
コード例 #5
0
        /// <summary>
        /// Cria uma nova consulta.
        /// </summary>
        /// <returns></returns>
        public Query.Queryable CreateQuery()
        {
            var query = new Query.Queryable();

            query.DataSource    = _dataSource;
            query.SourceContext = this;
            return(query);
        }
コード例 #6
0
 /// <summary>
 /// Executa a consulta que recupera uma seleção de valores.
 /// </summary>
 /// <param name="queryable"></param>
 /// <returns></returns>
 protected virtual System.Collections.IEnumerable ExecuteSelect(Query.Queryable queryable)
 {
     if (_executeSelect != null)
     {
         return(_executeSelect(queryable));
     }
     return(queryable.Execute());
 }
コード例 #7
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="queryable">Consulta associada.</param>
 /// <param name="entityLoader"></param>
 /// <param name="uiContext"></param>
 /// <param name="entityTypeManager"></param>
 /// <param name="parentResult"></param>
 /// <param name="exceptions"></param>
 public PrepareNestedQueriesResult(Query.Queryable queryable, IEntityLoader entityLoader, string uiContext, IEntityTypeManager entityTypeManager, IList <EntityLoaderCreatorArgs> parentResult, Queue <Exception> exceptions)
 {
     _queryable         = queryable;
     _entityLoader      = entityLoader;
     _uiContext         = uiContext;
     _entityTypeManager = entityTypeManager;
     _parentResult      = parentResult;
     _exceptions        = exceptions;
 }
コード例 #8
0
ファイル: Queryable2.cs プロジェクト: fabrimaciel/colosoft
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Criador de objetos.</param>
 /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param>
 public Queryable(Query.Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator, Func <Query.Queryable, IEnumerable <TEntity> > executeSelect)
 {
     queryable.Require("queryable").NotNull();
     _sourceContext = queryable.SourceContext as ILinqSourceContext;
     _queryable     = queryable;
     if (_sourceContext == null)
     {
         _sourceContext = new LinqSourceContext(queryable.SourceContext, new QueryableSourceProvider <TEntity>(queryable, bindStrategy, objectCreator, executeSelect));
     }
     _queryProvider = new QueryProvider(_sourceContext);
 }
コード例 #9
0
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="elementType"></param>
 /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param>
 public CustomQueryable(Query.Queryable queryable, Type elementType, Func <Query.Queryable, System.Collections.IEnumerable> executeSelect)
 {
     queryable.Require("queryable").NotNull();
     elementType.Require("elementType").NotNull();
     _elementType   = elementType;
     _sourceContext = queryable.SourceContext as ILinqSourceContext;
     _queryable     = queryable;
     if (_sourceContext == null)
     {
         _sourceContext = new LinqSourceContext(queryable.SourceContext, new QueryableSourceProvider(queryable, executeSelect));
     }
     _queryProvider = new QueryProvider(_sourceContext);
 }
コード例 #10
0
        /// <summary>
        /// Aplica os parametros da expressão para a consulta informada.
        /// </summary>
        /// <param name="queryable"></param>
        /// <param name="expression"></param>
        public void Apply(Query.Queryable queryable, Expression expression)
        {
            Visit(expression);
            if (_takeTranslator != null)
            {
                queryable.Take(_takeTranslator.Count.GetValueOrDefault());
            }
            if (_skipTranslator != null)
            {
                queryable.Skip(_skipTranslator.Skip.GetValueOrDefault());
            }
            if (_whereTranslator != null)
            {
                string where = _whereTranslator.WhereClause;
                if (!string.IsNullOrEmpty(where))
                {
                    queryable.WhereClause.And(ConditionalContainer.Parse(where));
                }
            }
            foreach (var i in _parameters)
            {
                queryable.Add(i);
            }
            if (_orderByTranslator != null && _orderByTranslator.Members.Any())
            {
                foreach (var i in _orderByTranslator.Members)
                {
                    queryable.Sort = new Sort();
                    queryable.Sort.Add(new SortEntry(new Column(i.DataMember.Name), i.Direction == OrderDirection.Descending));
                }
            }
            switch (_useMethod)
            {
            case QueryMethod.Count:
                queryable.Count();
                break;

            case QueryMethod.Sum:
            {
                if (_selectTranslator == null || !_selectTranslator.DataMembers.Any())
                {
                }
                break;
            }
            }
        }
コード例 #11
0
        /// <summary>
        /// Método acionado quando a consulta for executada.
        /// </summary>
        /// <param name="queryable"></param>
        /// <returns></returns>
        private IEnumerable <T> ExecuteSelect(Query.Queryable queryable)
        {
            IEnumerable <T> result = null;

            if (_executeSelect != null)
            {
                result = _executeSelect(queryable, queryable.DataSource, _bindStrategy, _objectCreator);
            }
            else
            {
                result = queryable.Execute <T>(queryable.DataSource, _bindStrategy, _objectCreator);
            }
            if (((IVirtualListResultProcessor <T>) this).HasDataPageLoadRegisters)
            {
                var dataPage = new DataPage();
                result = result.ToArray();
                dataPage.Populate(result);
                this.OnDataPageLoaded(new DataPageLoadedEventArgs <T>(dataPage));
            }
            return(result);
        }
コード例 #12
0
        /// <summary>
        /// Processa os resultado da consulta.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queryable"></param>
        /// <param name="uiContext"></param>
        /// <param name="bindStrategy"></param>
        /// <param name="objectCreator"></param>
        /// <returns></returns>
        private static IEnumerable <T> ExecuteSelectProcessResult <T>(this Query.Queryable queryable, string uiContext = null, Colosoft.Query.IQueryResultBindStrategy bindStrategy = null, Colosoft.Query.IQueryResultObjectCreator objectCreator = null)
        {
            var method = typeof(Business.IEntityManager).GetMethod("ProcessResult", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public, null, System.Reflection.CallingConventions.Any, new[] {
                typeof(Query.Queryable),
                typeof(Query.ISourceContext),
                typeof(string)
            }, null);

            method = method.MakeGenericMethod(typeof(T));
            try
            {
                return((IEnumerable <T>)method.Invoke(Colosoft.Business.EntityManager.Instance, new object[] {
                    queryable,
                    queryable.SourceContext,
                    uiContext
                }));
            }
            catch (System.Reflection.TargetInvocationException ex)
            {
                throw ex.InnerException;
            }
        }
コード例 #13
0
ファイル: EntityManager.cs プロジェクト: fabrimaciel/colosoft
        /// <summary>
        /// Prepara a consulta para recupera todos os dados das entidades que serão recuperadas.
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="query">Consulta sobre a qual será aplicada as sub-consultas.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <param name="uiContext">Contexto de interface com o usuário.</param>
        /// <returns>Resultado da preparação da consulta.</returns>
        public PrepareNestedQueriesResult Prepare <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(loader.PrepareNestedQueries(query, uiContext, _entityTypeManager));
        }
コード例 #14
0
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="elementType">Tipo do elemento do resultado da consulta.</param>
 public CustomQueryable(Query.Queryable queryable, Type elementType) : this(queryable, elementType, null)
 {
 }
コード例 #15
0
 /// <summary>
 /// Recupera a entidade completas com base na consulta informada.
 /// </summary>
 /// <param name="queryable">Consulta que será realizado.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <param name="entityTypeManager">Gerenciador dos tipos de entidas.</param>
 /// <returns></returns>
 public abstract IEnumerable <IEntity> GetFullEntities(Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager);
コード例 #16
0
 /// <summary>
 /// Recupera os descritores das entidades associadas com o consulta informada.
 /// </summary>
 /// <param name="queryable">Consulta que será realizada.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <returns></returns>
 public abstract IEnumerable <T> GetEntityDescriptors <T>(Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext) where T : IEntityDescriptor;
コード例 #17
0
ファイル: EntityManager.cs プロジェクト: fabrimaciel/colosoft
        public IEnumerable <TEntity> ProcessLazyResult <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null, EntityLoaderLazyArgs args = null) where TEntity : class, IEntity
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(new EntitiesEnumerable <TEntity>(loader.GetLazyEntities(query.Execute(), sourceContext, uiContext, _entityTypeManager, args)));
        }
コード例 #18
0
ファイル: EntityManager.cs プロジェクト: fabrimaciel/colosoft
        /// <summary>
        /// Processa os descritores para o resultado.
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <typeparam name="TEntityDescritor"></typeparam>
        /// <param name="query"></param>
        /// <param name="sourceContext"></param>
        /// <param name="uiContext"></param>
        /// <returns></returns>
        public IEnumerable <TEntityDescritor> ProcessResultDescriptor <TEntity, TEntityDescritor>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity where TEntityDescritor : IEntityDescriptor
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(loader.GetEntityDescriptors <TEntityDescritor>(query, sourceContext, uiContext));
        }
コード例 #19
0
ファイル: EntityManager.cs プロジェクト: fabrimaciel/colosoft
 /// <summary>
 /// Processa os descritores para o resultado.
 /// </summary>
 /// <typeparam name="TEntity"></typeparam>
 /// <param name="query"></param>
 /// <param name="sourceContext"></param>
 /// <param name="uiContext"></param>
 /// <returns></returns>
 public IEnumerable <IEntityDescriptor> ProcessResultDescriptor <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
 {
     return(ProcessResultDescriptor <TEntity, IEntityDescriptor>(query, sourceContext, uiContext));
 }
コード例 #20
0
ファイル: EntityManager.cs プロジェクト: fabrimaciel/colosoft
        public IEnumerable <TEntity> ProcessResult <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(new EntitiesEnumerable <TEntity>(loader.GetFullEntities(query, sourceContext, uiContext, _entityTypeManager)));
        }
コード例 #21
0
ファイル: Queryable2.cs プロジェクト: fabrimaciel/colosoft
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 public Queryable(Query.Queryable queryable) : this(queryable, null, null, null)
 {
 }
コード例 #22
0
ファイル: Queryable2.cs プロジェクト: fabrimaciel/colosoft
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Criador de objetos.</param>
 public Queryable(Query.Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator = null) : this(queryable, bindStrategy, objectCreator, null)
 {
 }
コード例 #23
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityLoader">Loader.</param>
 /// <param name="queryable">Consulta que será realizado.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <param name="entityTypeManager">Gerenciador dos tipos de entidas.</param>
 /// <returns></returns>
 public GetFullEntitiesEnumerable(EntityLoader <TEntity1, Model> entityLoader, Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager) : base(entityLoader, queryable, sourceContext, uiContext, entityTypeManager)
 {
 }
コード例 #24
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param>
 public QueryableSourceProvider(Query.Queryable queryable, Func <Query.Queryable, System.Collections.IEnumerable> executeSelect)
 {
     _queryable     = queryable;
     _executeSelect = executeSelect;
 }