/// <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> /// Processa os resultado da consulta. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryable"></param> /// <param name="uiContext"></param> /// <param name="args"></param> /// <param name="bindStrategy"></param> /// <param name="objectCreator"></param> /// <returns></returns> private static IEnumerable <T> ExecuteSelectProcessLazyResult <T>(this Query.Queryable queryable, string uiContext = null, Business.EntityLoaderLazyArgs args = null, Colosoft.Query.IQueryResultBindStrategy bindStrategy = null, Colosoft.Query.IQueryResultObjectCreator objectCreator = null) { var method = typeof(Business.IEntityManager).GetMethod("ProcessLazyResult", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public, null, System.Reflection.CallingConventions.Any, new[] { typeof(Query.Queryable), typeof(Query.ISourceContext), typeof(string), typeof(Business.EntityLoaderLazyArgs) }, null); method = method.MakeGenericMethod(typeof(T)); try { return((IEnumerable <T>)method.Invoke(Colosoft.Business.EntityManager.Instance, new object[] { queryable, queryable.SourceContext, uiContext, args })); } catch (System.Reflection.TargetInvocationException ex) { throw ex.InnerException; } }
/// <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; }
public static Collections.VirtualList <TEntity> ToVirtualResultLazy <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 { 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, bindStragety1, objectCreator1) => queryable3.ExecuteSelectProcessLazyResult <TEntity>(null, null, bindStragety1, objectCreator1); } return(new Business.QueryableVirtualList <TEntity>(queryable2, pageSize, listLoader, executeSelect, null, bindStrategy, objectCreator)); }
public static Collections.VirtualList <TEntity> ToVirtualResultLazy <TEntity>(this Colosoft.Query.Queryable queryable, int pageSize = 0, 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; 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, true, uiContext, null); executeSelect = (queryable3, dataSource, bindStrategy1, objectCreator1) => queryable3.ExecuteSelectProcessLazyResult <TEntity>(uiContext, null, bindStrategy1, objectCreator1); } else { virtualListLoader = new Colosoft.Business.QueryableVirtualListLoader <TEntity>(queryable2, countExpression, bindStrategy, objectCreator, null); } return(new Business.QueryableVirtualList <TEntity>(queryable2, pageSize, virtualListLoader, executeSelect, null, bindStrategy, objectCreator)); }
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> /// Realiza a carda da entidade com carga tardia dos dados filhos. /// </summary> /// <param name="record">Registro dos dados da entidade.</param> /// <param name="recordKey">Chave do registro.</param> /// <param name="bindStrategy">Estratégia de vinculação dos dados do resultado.</param> /// <param name="objectCreator">Instancia responsável por criar objetos.</param> /// <param name="sourceContext">Contexto de origem dos dados.</param> /// <param name="uiContext">Contexto visual.</param> /// <param name="entityTypeManager">Instancia do gerenciador de tipos de entidades.</param> /// <param name="args">Argumentos que serão usados</param> /// <returns></returns> public abstract IEntity LazyLoad(Colosoft.Query.IRecord record, Query.RecordKey recordKey, Colosoft.Query.IQueryResultBindStrategy bindStrategy, Colosoft.Query.IQueryResultObjectCreator objectCreator, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager, EntityLoaderLazyArgs args = null);
/// <summary> /// Realiza a carga completa da entidade. /// </summary> /// <param name="record">Registro dos dados da entidade.</param> /// <param name="recordKey">Chave do registro.</param> /// <param name="bindStrategy">Estratégia de vinculação dos dados do resultado.</param> /// <param name="objectCreator">Instancia responsável por criar objetos.</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 abstract IEntity FullLoad(Colosoft.Query.IRecord record, Query.RecordKey recordKey, Colosoft.Query.IQueryResultBindStrategySession bindStrategy, Colosoft.Query.IQueryResultObjectCreator objectCreator, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager);