/// <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> /// Libera a instancia. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { while (_schemas.Count > 0) { var schema = _schemas[0]; _schemas.RemoveAt(0); schema.Dispose(); } _creator = null; Type = null; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="result"></param> public QueryResult(IQueryResult result) { if (result == null) { throw new ArgumentNullException("result"); } _result = result; var ts = TypeBindStrategyCache.GetItem(typeof(TModel), t => new QueryResultObjectCreator(t)); _objectCreator = ts; _bindStrategy = ts; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="type">Tipo que será usado pela instancia.</param> /// <param name="creator">Instancia responsável por criar um instancia do tipo informado.</param> public TypeBindStrategy(Type type, IQueryResultObjectCreator creator = null) { type.Require("type").NotNull(); if (creator == null) { _creator = new QueryResultObjectCreator(type); } else { _creator = creator; } Type = type; }
/// <summary> /// Construtor completo. /// </summary> /// <param name="result">Resultado base da consulta.</param> /// <param name="bindStrategy">Estratégia de vinculação que será utilizada.</param> /// <param name="objectCreator">Instancia responsável pela criação do tipo do resultado.</param> public QueryResult(IQueryResult result, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator = null) { if (result == null) { throw new ArgumentNullException("result"); } else if (bindStrategy == null) { throw new ArgumentNullException("bindStrategy"); } _result = result; _bindStrategy = bindStrategy; if (objectCreator == null) { _objectCreator = new QueryResultObjectCreator(typeof(TModel)); } else { _objectCreator = objectCreator; } }
/// <summary> /// Converte para o resulta do tipo informado. /// </summary> /// <typeparam name="Model">Tipo deo modelo que será recuperado.</typeparam> /// <param name="bindStrategy">Estratégia de vinculação.</param> /// <param name="objectCreator"></param> /// <returns></returns> public QueryResult <Model> To <Model>(IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator = null) { return(new QueryResult <Model>(this, bindStrategy, objectCreator)); }
/// <summary> /// Cria uma instancia do provedor para a consulta informada. /// </summary> /// <param name="queryable"></param> /// <param name="bindStrategy">Estratégia de vinculação.</param> /// <param name="objectCreator">Criador de objetos.</param> /// <param name="executeSelect">Método acionado quando for executada uma seleção de valores da consulta.</param> /// <returns></returns> public static IQueryProvider Create <T>(Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator, Func <Query.Queryable, IEnumerable <T> > executeSelect) { queryable.Require("queryable").NotNull(); var sourceProvider = new QueryableSourceProvider <T>(queryable, bindStrategy, objectCreator, executeSelect); var sourceContext = new LinqSourceContext(queryable.SourceContext, sourceProvider); return(new QueryProvider(sourceContext)); }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="result">Instancia do resultado da consulta.</param> /// <param name="bindStrategy">Estratégia de vinculação.</param> /// <param name="objectCreator">Instancia do criador dos objetos.</param> public BindableQueryResult(IQueryResult result, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator) { _result = result; _bindStrategy = bindStrategy; _objectCreator = objectCreator; }
/// <summary> /// Executa a vinculação dos dados contidos na enumeração de registro informados /// e retorna uma enumeração das instancias preechidas. /// </summary> /// <param name="records">Registros que serão processados.</param> /// <param name="mode">Modo da estratégia.</param> /// <param name="creator">Instancia responsável pela criação dos objetos.</param> /// <returns></returns> public IEnumerable <T> Bind <T>(IEnumerable <IRecord> records, BindStrategyMode mode, IQueryResultObjectCreator creator) { IQueryResultBindStrategySession session = null; foreach (var i in records) { if (session == null) { session = CreateSession(i.Descriptor); } object result = creator.Create(); session.Bind(i, mode, ref result); yield return((T)result); } }
/// <summary> /// Executa a vinculação dos dados contidos na enumeração de registro informados /// e retorna uma enumeração das instancias preechidas. /// </summary> /// <typeparam name="T">Tipo que será usado na operação.</typeparam> /// <param name="records">Registros que serão processados.</param> /// <param name="mode">Modo da estratégia.</param> /// <param name="creator">Instancia responsável pela criação dos objetos.</param> /// <returns></returns> IEnumerable <T> IQueryResultBindStrategy.Bind <T>(IEnumerable <IRecord> records, BindStrategyMode mode, IQueryResultObjectCreator creator) { return(new Enumerable <T>(_func(records, mode))); }
/// <summary> /// Executa a vinculação dos dados contidos na enumeração de registro informados /// e retorna uma enumeração das instancias preechidas. /// </summary> /// <param name="records">Registros que serão processados.</param> /// <param name="mode">Modo da estratégia.</param> /// <param name="creator">Instancia responsável pela criação dos objetos.</param> /// <returns></returns> System.Collections.IEnumerable IQueryResultBindStrategy.Bind(IEnumerable <IRecord> records, BindStrategyMode mode, IQueryResultObjectCreator creator) { return(_func(records, mode)); }
/// <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="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> /// Adiciona uma query /// </summary> /// <param name="query"><see cref="Queryable"/> a ser adicionado</param> /// <param name="callback">Função de callback da consulta</param> /// <param name="bindStrategy">Estratégia de binding</param> /// <param name="objectCreator">Criador de objetos</param> public MultiQueryable Add(Queryable query, BindableQueryCallBack callback, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator) { bindStrategy.Require("bindStrategy").NotNull(); objectCreator.Require("objectCreator").NotNull(); _queries.Add(query); if (callback != null) { var wrapper = new BindableQueryCallBackWrapper(); wrapper.QueryCallBack = callback; wrapper.BindStrategy = bindStrategy; wrapper.ObjectCreator = objectCreator; _callbacks.Add(_queries.Count - 1, wrapper); } return(this); }
public MultiQueryable Add <TModel>(Queryable query, QueryCallBack <TModel> callback, QueryFailedCallBack failedCallBack, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator) { _queries.Add(query); if (bindStrategy == null && objectCreator == null) { var ts = TypeBindStrategyCache.GetItem(typeof(TModel), t => new QueryResultObjectCreator(t)); objectCreator = ts; bindStrategy = ts; } if (bindStrategy == null) { bindStrategy = new TypeBindStrategy(typeof(TModel), objectCreator); } if (callback != null) { QueryCallBackWrapper <TModel> wrapper = new QueryCallBackWrapper <TModel>(); wrapper.QueryCallBack = callback; wrapper.QueryFailedCallBack = failedCallBack; wrapper.BindStrategy = bindStrategy; wrapper.ObjectCreator = objectCreator; _callbacks.Add(_queries.Count - 1, wrapper); } return(this); }
/// <summary> /// Adiciona uma query /// </summary> /// <typeparam name="TModel">Tipo de retorno</typeparam> /// <param name="query"><see cref="Queryable"/> a ser adicionado</param> /// <param name="callback">Função de callback da consulta</param> /// <param name="bindStrategy">Estratégia de binding</param> /// <param name="objectCreator">Criador de objetos</param> public MultiQueryable Add <TModel>(Queryable query, QueryCallBack <TModel> callback, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator) { return(Add <TModel>(query, callback, null, bindStrategy, objectCreator)); }