/// <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="sourceContext"></param> /// <param name="childDataModel"></param> /// <param name="isLazy"></param> /// <param name="uiContext"></param> public LinkCreatorArgs(Colosoft.Query.ISourceContext sourceContext, Colosoft.Data.IModel childDataModel, bool isLazy, string uiContext) { this.SourceContext = sourceContext; this.ChildDataModel = childDataModel; this.IsLazy = isLazy; this.UIContext = uiContext; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="linkEntity"></param> /// <param name="entityCreator"></param> /// <param name="uiContext"></param> /// <param name="entityTypeManager"></param> /// <param name="sourceContext"></param> public EntityFromLinkCreatorArgs(IEntity linkEntity, EntityFromModelCreatorHandler entityCreator, string uiContext, IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext) { this.LinkEntity = linkEntity; this.EntityCreator = entityCreator; this.UIContext = uiContext; this.EntityTypeManager = entityTypeManager; this.SourceContext = sourceContext; }
/// <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> /// Libera a instancia. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { if (_entityLoader != null && Colosoft.Query.RecordObserverManager.Instance.IsEnabled) { Colosoft.Query.RecordObserverManager.Instance.Unregister(_entityLoader.DataModelTypeName, this); } _entityLoader = null; _sourceContext = null; _isDisposed = false; }
/// <summary> /// Recupera a instancia do descritor da entidade pelo uid informador. /// </summary> /// <param name="uid">Identificador unico da instancia.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <param name="uiContext">Contexto visual.</param> /// <returns></returns> public IEntityDescriptor GetDescriptorByUid <TEntity>(int uid, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity { sourceContext.Require("sourceContext").NotNull(); var loader = _entityTypeManager.GetLoader(typeof(TEntity)); if (!loader.HasUid) { throw new InvalidOperationException("Entity has not uid."); } var query = sourceContext.CreateQuery().From(new Query.EntityInfo(loader.DataModelType.FullName)).Where(string.Format("{0} = ?entityuid", loader.UidPropertyName)).Add("?entityuid", uid); return(ProcessResultDescriptor <TEntity>(query, sourceContext, uiContext).FirstOrDefault()); }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="entityLoader"></param> /// <param name="sourceContext"></param> /// <param name="collection"></param> public EntityDescriptorQueryResultChangedObserver(IEntityLoader entityLoader, Query.ISourceContext sourceContext, System.Collections.IList collection) { entityLoader.Require("entityLoader").NotNull(); collection.Require("collection").NotNull(); _uid = Query.QueryResultChangedObserverUidGenerator.CreateUid(); _collectionReference = new WeakReference(collection); _entityLoader = entityLoader; _sourceContext = sourceContext; if (Colosoft.Query.RecordObserverManager.Instance.IsEnabled) { Colosoft.Query.RecordObserverManager.Instance.Register(_entityLoader.DataModelTypeName, this); } }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="sourceContext">Contexto de origem que será usado para fazer as consulta no banco de dados.</param> /// <param name="typeSchema"></param> /// <param name="dataEntryDownloader">Instancia do downloader da entradas de dados.</param> /// <param name="dataEntriesRepository">Instancia do repositório das entradas de dados.</param> /// <param name="cacheLoaderObverser">Observer o loader.</param> /// <param name="logger"></param> public DataCacheManager(Colosoft.Query.ISourceContext sourceContext, ITypeSchema typeSchema, IDataEntryDownloader dataEntryDownloader, IDataEntriesRepository dataEntriesRepository, ICacheLoaderObserver cacheLoaderObverser, Colosoft.Logging.ILogger logger) { sourceContext.Require("sourceContext").NotNull(); typeSchema.Require("typeSchema").NotNull(); dataEntryDownloader.Require("dataEntryDownloader").NotNull(); dataEntriesRepository.Require("dataEntriesRepository").NotNull(); cacheLoaderObverser.Require("cacheLoaderObserver").NotNull(); logger.Require("logger").NotNull(); _sourceContext = sourceContext; _typeSchema = typeSchema; _dataEntryDownloader = dataEntryDownloader; _dataEntriesRepository = dataEntriesRepository; _cacheLoaderObserver = cacheLoaderObverser; _logger = logger; }
/// <summary> /// Cria uma entidade do tipo TEntity e a conecta ao contexto da origem dos dados. /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="sourceContext"></param> /// <returns></returns> public static TEntity Create <TEntity>(this Colosoft.Query.ISourceContext sourceContext) where TEntity : Colosoft.Business.IEntity, new() { try { var entity = new TEntity(); if (entity is Colosoft.Business.IConnectedEntity) { ((Colosoft.Business.IConnectedEntity)entity).Connect(sourceContext); } return(entity); } catch (System.Reflection.TargetInvocationException ex) { throw ex.InnerException; } }
/// <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); } }
/// <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 consulta para recuperar os itens filhos. /// </summary> /// <param name="parentUid">Identificador da entidade pai.</param> /// <param name="parentDataModel">Instancia com os dados do pai.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <returns></returns> public EntityInfoQuery[] CreateQueries(int parentUid, Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext) { var result = new EntityInfoQuery[_dynamicChild.Entries.Count]; var startDate = ServerData.GetDateTimeOffSet(); if (parentDataModel is Colosoft.Data.ITraceableModel) { startDate = ((Colosoft.Data.ITraceableModel)parentDataModel).CreatedDate; } for (var i = 0; i < result.Length; i++) { var entry = _dynamicChild.Entries[i]; result[i] = entry.CreateQuery(parentUid, _parentLoader, parentDataModel, sourceContext); } return(result); }
/// <summary> /// Cria um nova instancia da lista. /// Esse método é usado por reflexão. /// </summary> /// <param name="items"></param> /// <param name="child">Instancia do filho associado com o link.</param> /// <param name="linkInfo"></param> /// <param name="childFromModelCreator"></param> /// <param name="uiContext"></param> /// <param name="parentUidSetter"></param> /// <param name="sourceContext"></param> /// <param name="entityTypeManager"></param> /// <returns></returns> internal static EntityLinksList <TEntity> CreateLazyInstance(Lazy <IEnumerable <IEntity> > items, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, IEntityList child, string uiContext, Action <IEntity> parentUidSetter, Colosoft.Query.ISourceContext sourceContext, IEntityTypeManager entityTypeManager) { return(new EntityLinksList <TEntity>(new Lazy <IEnumerable <TEntity> >(() => new Collections.NotifyCollectionChangedObserverRegisterEnumerable <TEntity>(items.Value)), linkInfo, childFromModelCreator, child, uiContext, new Action <TEntity>(e => parentUidSetter(e)), sourceContext, entityTypeManager) { _isLazy = true }); }
/// <summary> /// Cria uma instancia já definindos os itens iniciais. /// </summary> /// <param name="items">Itens que serão usados na inicialização.</param> /// <param name="linkInfo">Informações do link.</param> /// <param name="childFromModelCreator"></param> /// <param name="child">Instancia do filho associado com o link.</param> /// <param name="uiContext"></param> /// <param name="parentUidSetter"></param> /// <param name="sourceContext">Contexto de origem de consultas.</param> /// <param name="entityTypeManager"></param> public EntityLinksList(IEnumerable <TEntity> items, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, IEntityList child, string uiContext, Action <TEntity> parentUidSetter, Colosoft.Query.ISourceContext sourceContext = null, IEntityTypeManager entityTypeManager = null) : base(items, uiContext, parentUidSetter, entityTypeManager) { Initialize(child, linkInfo, childFromModelCreator, sourceContext); }
/// <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> /// Inicializa a instancia. /// </summary> /// <param name="child">Instancia do filho associado.</param> /// <param name="linkInfo">Informações do link.</param> /// <param name="childFromModelCreator"></param> /// <param name="sourceContext">Contexto de origem de consultas.</param> private void Initialize(IEntityList child, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, Colosoft.Query.ISourceContext sourceContext) { child.Require("child").NotNull(); linkInfo.Require("linkInfo").NotNull(); _child = child; _linkInfo = linkInfo; _childFromModelCreator = childFromModelCreator; ((IConnectedEntity)this).Connect(sourceContext); if (_hasUid == null) { _hasUid = TypeManager.HasUid(typeof(TEntity)); } if (child is Collections.INotifyCollectionChangedDispatcher) { ((Collections.INotifyCollectionChangedDispatcher)child).AddCollectionChanged(ChildCollectionChanged, Collections.NotifyCollectionChangedDispatcherPriority.High); } else { child.CollectionChanged += ChildCollectionChanged; } }
/// <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="queryResultContainer">Container d resultado da consulta.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <param name="uiContext"></param> /// <returns></returns> public static IEnumerable <TEntity> ProcessLazyResult <TEntity>(this Colosoft.Query.IQueryResultContainer queryResultContainer, Colosoft.Query.ISourceContext sourceContext = null, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity { queryResultContainer.Require("queryResultContainer").NotNull(); return(ProcessLazyResult <TEntity>(queryResultContainer.GetResult(), sourceContext, uiContext)); }
/// <summary> /// Recupera o descritor da instancia pelo identificador informado. /// </summary> /// <typeparam name="TEntity">Tipo da entidade</typeparam> /// <param name="sourceContext">Contexto de origem.</param> /// <param name="uid">Identificador unico da instancia.</param> /// <param name="uiContext">Contexto de interface com o usuário.</param> /// <returns></returns> public static IEntityDescriptor GetDescriptor <TEntity>(this Colosoft.Query.ISourceContext sourceContext, int uid, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity { return(Colosoft.Business.EntityManager.Instance.GetDescriptorByUid <TEntity>(uid, 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)); }
/// <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="queryResult">Resultado da consulta.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <param name="uiContext"></param> /// <returns></returns> public static IEnumerable <TEntity> ProcessLazyResult <TEntity>(this Colosoft.Query.IQueryResult queryResult, Colosoft.Query.ISourceContext sourceContext = null, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity { queryResult.Require("queryResult").NotNull(); if (Colosoft.Business.EntityManager.Instance == null) { throw new InvalidOperationException("EntityManager instance is null"); } return(Colosoft.Business.EntityManager.Instance.ProcessLazyResult <TEntity>(queryResult, sourceContext, uiContext)); }
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> /// Construtor padrão. /// </summary> /// <param name="entityTypeManager"></param> /// <param name="sourceContext"></param> public EntityModelBinder(Colosoft.Business.IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext) : base(entityTypeManager) { _sourceContext = sourceContext; }
/// <summary> /// Cria a consulta para recuperar os itens filhos. /// </summary> /// <param name="parentDataModel">Instancia com os dados do pai.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <returns></returns> internal EntityInfoQuery[] CreateQueries(Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext) { var query = sourceContext.CreateQuery().From(new Query.EntityInfo(DataModelType.FullName)); string conditionalExpression = null; var conditional = GetConditional(); if (conditional != null) { conditionalExpression = conditional.Expression; foreach (var i in conditional.Parameters) { object value = i.Value; if (value is Colosoft.Query.ReferenceParameter) { var referenceParameter = (Colosoft.Query.ReferenceParameter)i.Value; var prop = parentDataModel.GetType().GetProperty(referenceParameter.ColumnName); if (prop != null) { try { value = prop.GetValue(parentDataModel, null); } catch (System.Reflection.TargetInvocationException ex) { throw ex.InnerException; } } else { throw new InvalidOperationException(ResourceMessageFormatter.Create(() => Properties.Resources.EntityLoaderReference_ParentPropertyNotFound, referenceParameter.ColumnName, parentDataModel.GetType().Name).Format()); } } query.Add(i.Name, value); } } return(new EntityInfoQuery[] { new EntityInfoQuery(DataModelType, EntityType, query.Where(conditionalExpression)) }); }
public IEnumerable <TEntity> ProcessResult <TEntity>(Colosoft.Business.PrepareNestedQueriesResult prepareResult, Colosoft.Query.ISourceContext sourceContext, Query.IQueryResult queryResult) where TEntity : class, IEntity { prepareResult.Require("prepareResult").NotNull(); var loader = _entityTypeManager.GetLoader(typeof(TEntity)); return(new EntitiesEnumerable <TEntity>(loader.GetFullEntities(prepareResult, sourceContext, queryResult))); }
public IEnumerable <TEntity> ProcessResult <TEntity>(Query.IQueryResult queryResult, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity { queryResult.Require("queryResult").NotNull(); var loader = _entityTypeManager.GetLoader(typeof(TEntity)); return(new EntitiesEnumerable <TEntity>(loader.GetFullEntities(queryResult, sourceContext, uiContext, _entityTypeManager))); }
/// <summary> /// Cria a consulta para recuperar os itens filhos. /// </summary> /// <param name="parentUid">Identificador da entidade pai.</param> /// <param name="parentUidProperty"></param> /// <param name="sourceContext">Contexto de origem.</param> /// <returns></returns> public Colosoft.Query.Queryable CreateQuery(int parentUid, string parentUidProperty, Colosoft.Query.ISourceContext sourceContext) { return(sourceContext.CreateQuery().From(new Query.EntityInfo(LinkDataModelType.FullName, "t1")).Join(ChildDataModelType.FullName, Query.JoinType.Inner, Query.ConditionalContainer.Parse(string.Format("t1.[{0}] == t2.[{1}]", ChildPropertyName, ForeignPropertyName)), "t2").Where(string.Format("t2.[{0}] == ?parentUid", parentUidProperty)).Add("?parentUid", parentUid)); }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="sourceContext"></param> /// <param name="entityTypeManager"></param> public EntityModelBinderProvider(Colosoft.Business.IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext) { _sourceContext = sourceContext; _entityTypeManager = entityTypeManager; }
/// <summary> /// Cria a consulta para recuperar os itens filhos. /// </summary> /// <param name="parentUid">Identificador da entidade pai.</param> /// <param name="parentLoader">Loader do pai.</param> /// <param name="parentDataModel">Instancia com os dados do pai.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <returns></returns> internal EntityInfoQuery CreateQuery(int parentUid, IEntityLoader parentLoader, Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext) { var query = sourceContext.CreateQuery().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", parentUid); conditionalExpression = string.Format("{0} == ?parentUid", _foreignPropertyName); } if (Conditional != null) { if (parentLoader.HasUid) { conditionalExpression = string.Format("{0} && ({1})", conditionalExpression, this.Conditional.Expression); } else { conditionalExpression = this.Conditional.Expression; } foreach (var i in this.Conditional.Parameters) { if (i.Value is Query.ReferenceParameter) { var reference = (Query.ReferenceParameter)i.Value; var property = parentDataModel.GetType().GetProperty(reference.ColumnName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); if (property == null) { throw new Exception(string.Format("Property {0} not found in type {1}", reference.ColumnName, parentDataModel.GetType().FullName)); } try { var value = property.GetValue(parentDataModel, null); query.Add(i.Name, value); } catch (System.Reflection.TargetInvocationException ex) { throw ex.InnerException; } } else { query.Add(i.Name, i.Value); } } } query.Where(conditionalExpression); return(new EntityInfoQuery(DataModelType, EntityType, query)); }
/// <summary> /// Cria a consulta para recuperar os itens filhos. /// </summary> /// <param name="parentUid">Identificador da entidade pai.</param> /// <param name="parentDataModel">Instancia com os dados do pai.</param> /// <param name="sourceContext">Contexto de origem.</param> /// <returns></returns> public EntityInfoQuery[] CreateQueries(int parentUid, Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext) { var query = sourceContext.CreateQuery().From(new Query.EntityInfo(DataModelType.FullName)); string conditionalExpression = null; if (_parentLoader.HasUid) { query.Add("?parentUid", parentUid); conditionalExpression = string.Format("{0} == ?parentUid", _foreignPropertyName); } if (Conditional != null) { var conditional = this.Conditional(); if (conditional != null) { if (!string.IsNullOrEmpty(conditionalExpression)) { conditionalExpression = string.Format("{0} && ({1})", conditionalExpression, conditional.Expression); } else { conditionalExpression = conditional.Expression; } foreach (var i in conditional.Parameters) { query.Add(i.Name, i.Value); } } } if (string.IsNullOrEmpty(conditionalExpression)) { throw new InvalidOperationException(string.Format("Not support child '{0}', because not found conditional expression.", Name)); } return(new EntityInfoQuery[] { new EntityInfoQuery(DataModelType, EntityType, query.Where(conditionalExpression)) }); }