/// <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; }
/// <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; }
/// <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; }
/// <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)); }
/// <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); }
/// <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()); }
/// <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; }
/// <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); }
/// <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); }
/// <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; } } }
/// <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); }
/// <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; } }
/// <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)); }
/// <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) { }
/// <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);
/// <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;
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))); }
/// <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)); }
/// <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)); }
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))); }
/// <summary> /// Cria a instancia a partir de uma consulta. /// </summary> /// <param name="queryable"></param> public Queryable(Query.Queryable queryable) : this(queryable, null, null, null) { }
/// <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) { }
/// <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) { }
/// <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; }