public static Collections.VirtualList <TEntity> ToVirtualResult <TEntity>(this Colosoft.Query.Queryable queryable, int pageSize, string countExpression = null, string uiContext = null, Colosoft.Query.IQueryResultBindStrategy bindStrategy = null, Colosoft.Query.IQueryResultObjectCreator objectCreator = null) where TEntity : class { queryable.Require("queryable").NotNull(); Collections.VirtualListLoader <TEntity> virtualListLoader = null; Colosoft.Query.QueryableExecuterHandler <TEntity> executeSelect = null; Collections.VirtualList <TEntity> result = null; if (bindStrategy == null && objectCreator == null) { var ts = Colosoft.Query.TypeBindStrategyCache.GetItem(typeof(TEntity), t => new Colosoft.Query.QueryResultObjectCreator(t)); objectCreator = ts; bindStrategy = ts; } if (bindStrategy == null) { bindStrategy = new Colosoft.Query.TypeBindStrategy(typeof(TEntity), objectCreator); } var queryable2 = (Colosoft.Query.Queryable)queryable.Clone(); if (typeof(Colosoft.Business.IEntity).IsAssignableFrom(typeof(TEntity))) { virtualListLoader = Colosoft.Business.EntityManager.Instance.GetEntityVirtualListLoader <TEntity>(queryable2, countExpression, false, uiContext, null); executeSelect = (queryable3, dataSource, bindStrategy1, objectCreator1) => queryable3.ExecuteSelectProcessResult <TEntity>(uiContext, bindStrategy1, objectCreator1); } else { virtualListLoader = new Colosoft.Business.QueryableVirtualListLoader <TEntity>(queryable2, countExpression, bindStrategy, objectCreator, null); } result = new Business.QueryableVirtualList <TEntity>(queryable2, pageSize, virtualListLoader, executeSelect, null, bindStrategy, objectCreator); return(result); }
/// <summary> /// Cria um nova consulta. /// </summary> /// <returns></returns> public Colosoft.Query.Queryable CreateQuery() { var query = new Colosoft.Query.Queryable(); query.DataSource = _dataSource; return(query); }
/// <summary> /// Prepara as consultas aninhadas para a consulta informada. /// </summary> /// <param name="queryable">Consulta que será usada para recuperar a entidade.</param> /// <param name="uiContext">Contexto visual;</param> /// <param name="entityTypeManager">Instancia do gerenciador de tipos de entidades.</param> /// <returns>Dados da preparação.</returns> public virtual PrepareNestedQueriesResult PrepareNestedQueries(Colosoft.Query.Queryable queryable, string uiContext, IEntityTypeManager entityTypeManager) { var parentResult = new List <EntityLoaderCreatorArgs>(); var exceptions = new Queue <Exception>(); CreateNestedQueries(queryable, uiContext, entityTypeManager, parentResult, exceptions); return(new PrepareNestedQueriesResult(queryable, this, uiContext, entityTypeManager, parentResult, exceptions)); }
/// <summary> /// Processa o resultado da consulta a carrega as entidades de negócio. /// </summary> /// <typeparam name="TEntity">Tipo da entidade de negócio.</typeparam> /// <param name="queryable">Consulta.</param> /// <param name="uiContext"></param> /// <returns></returns> public static IEnumerable <TEntity> ProcessLazyResult <TEntity>(this Colosoft.Query.Queryable queryable, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity { queryable.Require("queryable").NotNull(); if (Colosoft.Business.EntityManager.Instance == null) { throw new InvalidOperationException("EntityManager instance is null"); } return(Colosoft.Business.EntityManager.Instance.ProcessLazyResult <TEntity>(queryable, queryable.SourceContext, uiContext)); }
/// <summary> /// Cria a instancia com o suporte para estratégia de vinculação. /// </summary> /// <param name="entityTypeManager">Gerenciador dos tipos de entidades.</param> /// <param name="entityLoader">Loader da entidade.</param> /// <param name="queryable"></param> /// <param name="countExpression"></param> /// <param name="isLazy">Identifica se é para fazer uma carga tardia.</param> /// <param name="castHandler">Instancia do manipulador que vai realizar o cast do item do resultado.</param> /// <param name="uiContext">Contexto de interface com o usuário.</param> public QueryableEntityVirtualListLoader(IEntityTypeManager entityTypeManager, IEntityLoader entityLoader, Colosoft.Query.Queryable queryable, string countExpression, bool isLazy, Func <object, TEntity> castHandler, string uiContext) { _entityTypeManager = entityTypeManager; _entityLoader = entityLoader; _queryable = queryable; _countExpression = countExpression; _isLazy = isLazy; _uiContext = uiContext; _castHandler = castHandler; }
/// <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> /// Executa a primeira consulta para recuperar o quantidade de registro /// da lista. /// </summary> /// <param name="query">Consulta de deve ser executada.</param> /// <returns></returns> protected virtual int ExecuteCount(Colosoft.Query.Queryable query) { using (var enumerator = query.Execute().GetEnumerator()) { if (enumerator.MoveNext()) { return(enumerator.Current.GetInt32(0)); } return(0); } }
public static Collections.VirtualList <TEntity> ToVirtualResult <TEntity>(this Colosoft.Query.Queryable queryable, int pageSize, Collections.VirtualListLoader <TEntity> listLoader, Colosoft.Query.IQueryResultBindStrategy bindStrategy = null, Colosoft.Query.IQueryResultObjectCreator objectCreator = null) where TEntity : class { listLoader.Require("listLoader").NotNull(); queryable.Require("queryable").NotNull(); var queryable2 = (Colosoft.Query.Queryable)queryable.Clone(); Colosoft.Query.QueryableExecuterHandler <TEntity> executeSelect = null; if (typeof(Colosoft.Business.IEntity).IsAssignableFrom(typeof(TEntity))) { executeSelect = (queryable3, dataSource, bindStrategy1, objectCreator1) => queryable3.ExecuteSelectProcessResult <TEntity>(null, bindStrategy1, objectCreator1); } return(new Business.QueryableVirtualList <TEntity>(queryable2, pageSize, listLoader, executeSelect, null, bindStrategy, objectCreator)); }
/// <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> /// Construtor padrão. /// </summary> /// <param name="queryable">Consulta associada.</param> /// <param name="pageSize"></param> /// <param name="loader"></param> /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param> /// <param name="referenceObject"></param> /// <param name="bindStrategy"></param> /// <param name="objectCreator"></param> public QueryableVirtualList(Colosoft.Query.Queryable queryable, int pageSize, VirtualListLoader <T> loader, Colosoft.Query.QueryableExecuterHandler <T> executeSelect, object referenceObject, Colosoft.Query.IQueryResultBindStrategy bindStrategy, Colosoft.Query.IQueryResultObjectCreator objectCreator) : base(pageSize, loader, referenceObject) { _queryable = queryable; _executeSelect = executeSelect; _bindStrategy = bindStrategy; _objectCreator = objectCreator; if (_bindStrategy == null && _objectCreator == null) { var ts = Colosoft.Query.TypeBindStrategyCache.GetItem(typeof(T), t => new Colosoft.Query.QueryResultObjectCreator(t)); _objectCreator = ts; _bindStrategy = ts; } if (_bindStrategy == null) { _bindStrategy = new Colosoft.Query.TypeBindStrategy(typeof(T), objectCreator); } }
/// <summary> /// Realiza a carga da entidade com carga tardia dos dados filhos. /// </summary> /// <param name="query">Instancia da consulta para recuperar a entidade.</param> /// <param name="sourceContext">Contexto de origem dos dados.</param> /// <param name="uiContext">Contexto visual.</param> /// <param name="args">Argumentos que serão usados</param> /// <param name="entityTypeManager">Instancia do gerenciador de tipos de entidades.</param> /// <returns></returns> public virtual IEntity LazyLoad(Colosoft.Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager, EntityLoaderLazyArgs args = null) { var result = query.Take(1).Execute(); var enumerator = result.GetEnumerator(); if (enumerator.MoveNext()) { var record = enumerator.Current; var bindStrategy = GetBindStrategy(); var objectCreator = GetObjectCreator(); var recordKey = GetRecordKeyFactory().Create(Colosoft.Reflection.TypeName.Get(DataModelType), record); return(LazyLoad(record, recordKey, bindStrategy, objectCreator, sourceContext, uiContext, entityTypeManager)); } else { return(null); } }
/// <summary> /// Realiza a carga completa da entidade. /// </summary> /// <param name="query">Instancia da consulta para recuperar a entidade.</param> /// <param name="sourceContext">Contexto de origem dos dados.</param> /// <param name="uiContext">Contexto visual.</param> /// <param name="entityTypeManager">Gerenciador de tipos.</param> /// <returns></returns> public virtual IEntity FullLoad(Colosoft.Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager) { var result = query.Take(1).Execute(); var enumerator = result.GetEnumerator(); if (enumerator.MoveNext()) { var record = enumerator.Current; var bindStrategySession = GetBindStrategy().CreateSession(record.Descriptor); var objectCreator = GetObjectCreator(); var recordKeyFactory = GetRecordKeyFactory(); var dataModelTypeName = Colosoft.Reflection.TypeName.Get(DataModelType); var recordKey = recordKeyFactory.Create(dataModelTypeName, record); return(FullLoad(record, recordKey, bindStrategySession, objectCreator, sourceContext, uiContext, entityTypeManager)); } else { return(null); } }
internal void CreateQueries(Colosoft.Query.Queryable queryable, string parentUidProperty, string uiContext, IEntityTypeManager entityTypeManager, Queue <Exception> exceptions, EntityLoaderExecuteQueryHandler callBack, Colosoft.Query.SubQueryFailedCallBack failedCallBack) { var loader = entityTypeManager.GetLoader(LinkEntityType); var result = new List <EntityLoaderCreatorArgs>(); var query = queryable.BeginSubQuery((sender, e) => { var bindStrategy = loader.GetBindStrategy(); var objectCreator = loader.GetObjectCreator(); var recordKeyFactory = loader.GetRecordKeyFactory(); var dataModelTypeName = Colosoft.Reflection.TypeName.Get(loader.DataModelType); result.Clear(); foreach (var record in e.Result) { var data = objectCreator.Create(); if (!bindStrategy.Bind(record, Query.BindStrategyMode.All, ref data).Any()) { throw new Exception(string.Format("Not found scheme for bind record data to type '{0}'", data.GetType().FullName)); } var recordKey = recordKeyFactory.Create(dataModelTypeName, record); result.Add(new EntityLoaderCreatorArgs((Data.IModel)data, recordKey, new EntityLoaderChildContainer(), new EntityLoaderLinksContainer(), new EntityLoaderReferenceContainer(), uiContext, entityTypeManager)); } var entities = new List <IEntity>(); foreach (var i in result) { IEntity entity = null; LazyDataState lazyDataState = new LazyDataState(); loader.GetLazyData(i, lazyDataState, queryable.SourceContext, uiContext, entityTypeManager, exceptions); entity = loader.Create(uiContext, entityTypeManager, i, queryable.SourceContext); lazyDataState.Entity = entity; entities.Add(entity); i.Dispose(); } var entitiesEnumerable = entities; callBack(this, new EntityLoaderExecuteQueryEventArgs(LinkDataModelType, LinkEntityType, e.ReferenceValues, entitiesEnumerable)); }, failedCallBack).From(new Query.EntityInfo(LinkDataModelType.FullName, "t1")); query.Join(ChildDataModelType.FullName, Query.JoinType.Inner, Query.ConditionalContainer.Parse(string.Format("t1.{0} == t2.{1}", ChildPropertyName, ForeignPropertyName)), "t2"); query.Where(string.Format("t2.{0} == ?parentUid", parentUidProperty)); query.Add("?parentUid", new Query.ReferenceParameter(parentUidProperty)); loader.CreateNestedQueries(query, uiContext, entityTypeManager, result, exceptions); query.EndSubQuery(); }
/// <summary> /// Cria as consulta para recupera os itens filhos. /// </summary> /// <param name="queryable">Consulta do item pai.</param> /// <param name="uiContext">Contexto visual.</param> /// <param name="exceptions">Fila do erros ocorridos.</param> /// <param name="entityTypeManager">Instancia do gereciador de tipos da entidade de negócio.</param> /// <param name="callBack"></param> /// <param name="failedCallBack"></param> /// <returns></returns> public void CreateQueries(Colosoft.Query.Queryable queryable, string uiContext, IEntityTypeManager entityTypeManager, Queue <Exception> exceptions, EntityLoaderExecuteQueryHandler callBack, Colosoft.Query.SubQueryFailedCallBack failedCallBack) { IEnumerable <IEntity> entities = null; var entriesCount = _dynamicChild.Entries.Count; var dynamicChildPosition = 0; for (var i = 0; i < _dynamicChild.Entries.Count; i++) { var entry = _dynamicChild.Entries[i]; entry.CreateQueries(queryable, uiContext, _parentLoader, entityTypeManager, exceptions, (sender, e) => { if (dynamicChildPosition == 0) { entities = e.Result; } else { entities = entities.Concat(e.Result); } if (++dynamicChildPosition == entriesCount) { dynamicChildPosition = 0; IEnumerable <IEntity> entitiesEnumerable = entities ?? new IEntity[0]; callBack(this, new EntityLoaderExecuteQueryEventArgs(DataModelType, EntityType, new Query.ReferenceParameterValueCollection(), entitiesEnumerable)); entities = null; } }, (sender, e) => { failedCallBack(this, e); }); } if (entriesCount == 0) { queryable.NestedQueriesProcessed += (sender, e) => { for (var i = 0; i < e.RecordsCount; i++) { IEnumerable <IEntity> entitiesEnumerable = new IEntity[0]; callBack(this, new EntityLoaderExecuteQueryEventArgs(DataModelType, EntityType, new Query.ReferenceParameterValueCollection(), entitiesEnumerable)); } }; } }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="dataModelType">Tipo do modelo de dados.</param> /// <param name="entityType">Tipo da entidade do resultado.</param> /// <param name="query">Consulta.</param> public EntityInfoQuery(Type dataModelType, Type entityType, Colosoft.Query.Queryable query) { this.DataModelType = dataModelType; this.EntityType = entityType; this.Query = query; }
/// <summary> /// Executa a primeira consulta para recuperar o quantidade de registro /// da lista. /// </summary> /// <param name="query">Consulta de deve ser executada.</param> /// <returns></returns> protected virtual int ExecuteCount(Colosoft.Query.Queryable query) { return(query.Execute().First().GetInt32(0)); }
/// <summary> /// Cria a instancia com o suporte para estratégia de vinculação. /// </summary> /// <param name="queryable"></param> /// <param name="countExpression"></param> /// <param name="bindStrategy"></param> /// <param name="objectCreator"></param> /// <param name="castHandler">Instancia do manipulador que vai realizar o cast do item do resultado.</param> public QueryableVirtualListLoader(Colosoft.Query.Queryable queryable, string countExpression, Colosoft.Query.IQueryResultBindStrategy bindStrategy, Colosoft.Query.IQueryResultObjectCreator objectCreator, Func <object, T> castHandler) : this(queryable, countExpression) { _bindStrategy = bindStrategy; _objectCreator = objectCreator; _castHandler = castHandler; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="queryable"></param> /// <param name="countExpression"></param> public QueryableVirtualListLoader(Colosoft.Query.Queryable queryable, string countExpression) { _queryable = queryable; _countExpression = countExpression; }
public static Collections.VirtualList <TProxy> ToProxyVirtualResult <TEntity, TProxy>(this Colosoft.Query.Queryable queryable, int pageSize = 0, string countExpression = null, Func <TEntity, TProxy> proxyCreator = null) where TEntity : new() { queryable.Require("queryable").NotNull(); var queryable2 = (Colosoft.Query.Queryable)queryable.Clone(); var bindStrategy = Colosoft.Query.TypeBindStrategyCache.GetItem(typeof(TEntity), f => new Colosoft.Query.QueryResultObjectCreator(() => new TEntity())); var objectCreator = bindStrategy; return(new Business.QueryableVirtualList <TProxy>(queryable2, pageSize, new Colosoft.Business.QueryableVirtualListLoader <TProxy>(queryable2, countExpression, bindStrategy, bindStrategy, proxyCreator != null ? new Func <object, TProxy>(f => proxyCreator((TEntity)f)) : null), null, null, bindStrategy, objectCreator)); }
/// <summary> /// Recuper o Loader da lista virtual para a entidade do tipo informado. /// </summary> /// <param name="queryable">Consulta.</param> /// <param name="countExpression">Expressão para a consulta Count.</param> /// <param name="isLazy">Identifica se é para carregar com lazy.</param> /// <param name="uiContext">Contexto de interface com o usuário.</param> /// <param name="castHandler">Instancia do manipulador que vai realizar o cast do item do resultado.</param> /// <returns></returns> public Colosoft.Collections.VirtualListLoader <TEntity> GetEntityVirtualListLoader <TEntity>(Colosoft.Query.Queryable queryable, string countExpression, bool isLazy, string uiContext, Func <object, TEntity> castHandler) where TEntity : class { var loaderType = typeof(Business.QueryableEntityVirtualListLoader <>).MakeGenericType(typeof(TEntity)); var parameters = new object[] { _entityTypeManager, _entityTypeManager.GetLoader(typeof(TEntity)), queryable, countExpression, isLazy, castHandler, uiContext, }; return((Colosoft.Collections.VirtualListLoader <TEntity>)Activator.CreateInstance(loaderType, parameters)); }
internal void CreateQueries(Colosoft.Query.Queryable queryable, string uiContext, IEntityTypeManager entityTypeManager, Queue <Exception> exceptions, EntityLoaderExecuteQueryHandler callBack, Colosoft.Query.SubQueryFailedCallBack failedCallBack) { if (_entityLoader == null) { _entityLoader = entityTypeManager.GetLoader(EntityType); } var result = new List <EntityLoaderCreatorArgs>(); var query = queryable.BeginSubQuery((sender, e) => { List <IEntity> entities = null; try { var bindStrategy = _entityLoader.GetBindStrategy(); var objectCreator = _entityLoader.GetObjectCreator(); var recordKeyFactory = _entityLoader.GetRecordKeyFactory(); Colosoft.Reflection.TypeName dataModelTypeName = null; try { dataModelTypeName = Colosoft.Reflection.TypeName.Get(_entityLoader.DataModelType); } catch (Exception ex) { throw new Exception("An error ocurred when get DataModelType", ex); } result.Clear(); foreach (var record in e.Result) { var data = objectCreator.Create(); var bindResult = bindStrategy.Bind(record, Query.BindStrategyMode.All, ref data); if (!bindResult.Any()) { throw new Exception(string.Format("Not found scheme for bind record data to type '{0}'", data.GetType().FullName)); } Query.RecordKey recordKey = null; try { recordKey = recordKeyFactory.Create(dataModelTypeName, record); } catch (Exception ex) { throw new Exception("An error ocurred when create record key", ex); } result.Add(new EntityLoaderCreatorArgs((Data.IModel)data, recordKey, new EntityLoaderChildContainer(), new EntityLoaderLinksContainer(), new EntityLoaderReferenceContainer(), uiContext, entityTypeManager)); } entities = new List <IEntity>(); foreach (var i in result) { try { IEntity entity = null; LazyDataState lazyDataState = new LazyDataState(); _entityLoader.GetLazyData(i, lazyDataState, queryable.SourceContext, uiContext, entityTypeManager, exceptions); entity = _entityLoader.Create(uiContext, entityTypeManager, i, queryable.SourceContext); lazyDataState.Entity = entity; entities.Add(entity); i.Dispose(); } catch (Exception ex) { throw new AggregateException(ex.Message, exceptions); } } } catch (Exception ex) { failedCallBack(sender, new Query.SubQueryCallBackFailedArgs(e.Info, new Query.QueryFailedInfo(Query.QueryFailedReason.Error, ex.Message.GetFormatter(), ex))); return; } callBack(this, new EntityLoaderExecuteQueryEventArgs(DataModelType, EntityType, e.ReferenceValues, entities)); entities.Clear(); }, failedCallBack).From(new Query.EntityInfo(DataModelType.FullName)); var conditional = this.GetConditional(); if (conditional == null) { throw new InvalidOperationException("Conditional not found"); } query.Where(conditional.Expression); foreach (var i in conditional.Parameters) { query.Add(i.Name, i.Value); } _entityLoader.CreateNestedQueries(query, uiContext, entityTypeManager, result, exceptions); query.EndSubQuery(); }
internal void CreateQueries(Colosoft.Query.Queryable queryable, string uiContext, IEntityLoader parentLoader, IEntityTypeManager entityTypeManager, Queue <Exception> exceptions, EntityLoaderExecuteQueryHandler callBack, Colosoft.Query.SubQueryFailedCallBack failedCallBack) { if (_entityLoader == null) { _entityLoader = entityTypeManager.GetLoader(EntityType); } var result = new List <EntityLoaderCreatorArgs>(); var query = queryable.BeginSubQuery((sender, e) => { List <IEntity> entities = null; try { var bindStrategy = _entityLoader.GetBindStrategy(); var objectCreator = _entityLoader.GetObjectCreator(); var recordKeyFactory = _entityLoader.GetRecordKeyFactory(); var dataModelTypeName = Colosoft.Reflection.TypeName.Get(_entityLoader.DataModelType); result.Clear(); foreach (var record in e.Result) { var data = objectCreator.Create(); if (!bindStrategy.Bind(record, Query.BindStrategyMode.All, ref data).Any()) { throw new Exception(string.Format("Not found scheme for bind record data to type '{0}'", data.GetType().FullName)); } var recordKey = recordKeyFactory.Create(dataModelTypeName, record); result.Add(new EntityLoaderCreatorArgs((Data.IModel)data, recordKey, new EntityLoaderChildContainer(), new EntityLoaderLinksContainer(), new EntityLoaderReferenceContainer(), uiContext, entityTypeManager)); } entities = new List <IEntity>(); foreach (var i in result) { IEntity entity = null; LazyDataState lazyDataState = new LazyDataState(); _entityLoader.GetLazyData(i, lazyDataState, queryable.SourceContext, uiContext, entityTypeManager, exceptions); entity = _entityLoader.Create(uiContext, entityTypeManager, i, queryable.SourceContext); lazyDataState.Entity = entity; entities.Add(entity); i.Dispose(); } } catch (Exception ex) { failedCallBack(sender, new Query.SubQueryCallBackFailedArgs(e.Info, new Query.QueryFailedInfo(Query.QueryFailedReason.Error, ex.Message.GetFormatter(), ex))); return; } callBack(this, new EntityLoaderExecuteQueryEventArgs(DataModelType, EntityType, e.ReferenceValues, entities)); }, failedCallBack).From(new Query.EntityInfo(DataModelType.FullName)); if (ExecutePredicate != null) { query.ExecutePredicate = (Colosoft.Query.QueryExecutePredicate)ExecutePredicate.Clone(); } string conditionalExpression = null; if (parentLoader.HasUid) { query.Add("?parentUid", new Query.ReferenceParameter(parentLoader.UidPropertyName)); conditionalExpression = string.Format("{0} == ?parentUid", _foreignPropertyName); } if (Conditional != null) { if (!string.IsNullOrEmpty(conditionalExpression)) { conditionalExpression = string.Format("{0} && ({1})", conditionalExpression, this.Conditional.Expression); } else { conditionalExpression = this.Conditional.Expression; } foreach (var i in this.Conditional.Parameters) { query.Add(i.Name, i.Value); } } if (string.IsNullOrEmpty(conditionalExpression)) { throw new InvalidOperationException("Not support child, because not found conditional expression."); } query.Where(conditionalExpression); if (_entityLoader != parentLoader) { _entityLoader.CreateNestedQueries(query, uiContext, entityTypeManager, result, exceptions); } query.EndSubQuery(); }
public static Collections.VirtualList <TEntity> ToVirtualResult <TEntity>(this Colosoft.Query.Queryable queryable, Colosoft.Query.IQueryResultBindStrategy bindStrategy = null, Colosoft.Query.IQueryResultObjectCreator objectCreator = null) where TEntity : class { return(ToVirtualResult <TEntity>(queryable, 0, null, null, bindStrategy, objectCreator)); }
/// <summary> /// Cria as consultas aninhadas para recupera as referencia da entidade pai. /// </summary> /// <param name="queryable">Consulta usada para recueprar a entidade.</param> /// <param name="uiContext">Contexto visual.</param> /// <param name="entityTypeManager">Instancia do gerenciador de tipos de entidades.</param> /// <param name="parentResult">Resultados dos itens pai.</param> /// <param name="exceptions">Fila dos erros ocorridos.</param> public abstract void CreateNestedQueries(Colosoft.Query.Queryable queryable, string uiContext, IEntityTypeManager entityTypeManager, IList <EntityLoaderCreatorArgs> parentResult, Queue <Exception> exceptions);
/// <summary> /// Processa a consulta e recupera o resultado como IEntityDescriptors. /// </summary> /// <typeparam name="TEntity"></typeparam> /// <typeparam name="TEntityDescriptor"></typeparam> /// <param name="query">Consulta que será utilizada no processamento.</param> /// <param name="uiContext"></param> /// <returns></returns> public static IEnumerable <TEntityDescriptor> ProcessResultDescriptor <TEntity, TEntityDescriptor>(this Colosoft.Query.Queryable query, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity where TEntityDescriptor : IEntityDescriptor { query.Require("query").NotNull(); if (Colosoft.Business.EntityManager.Instance == null) { throw new InvalidOperationException("EntityManager instance is null"); } return(Colosoft.Business.EntityManager.Instance.ProcessResultDescriptor <TEntity, TEntityDescriptor>(query, query.SourceContext, uiContext)); }
/// <summary> /// Construtor usado para carregar as entidade com base no resultado preparado. /// </summary> /// <param name="entityLoader">Loader associado.</param> /// <param name="queryable"></param> /// <param name="sourceContext"></param> /// <param name="result"></param> /// <param name="uiContext"></param> /// <param name="entityTypeManager"></param> /// <param name="entityLazyArgs"></param> public GetLazyEntitiesEnumerable(EntityLoader <TEntity1, Model> entityLoader, Colosoft.Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, IEnumerable <Colosoft.Query.IRecord> result, string uiContext, IEntityTypeManager entityTypeManager, EntityLoaderLazyArgs entityLazyArgs) : base(entityLoader, queryable, sourceContext, uiContext, entityTypeManager) { _entityLazyArgs = entityLazyArgs; _result = result; }