コード例 #1
0
 /// <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);
     }
 }
コード例 #2
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;
 }
コード例 #3
0
        /// <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;
            }
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
 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));
 }
コード例 #7
0
 /// <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);