public List <T> Query <T>(SqlCondition condition)
        {
            EntityBase entity = EntityManager.GetEntity(condition.ConnectionName, condition.TableName);

            if (entity == null)
            {
                throw new Exception("Invalid connection or table.");
            }
            List <string> attrList = new List <string>();

            foreach (var attr in entity.Attributes.Keys)
            {
                if ((condition.FilterWay == FilterWay.FilterOut && !condition.FilterColumns.Contains(attr)) ||
                    (condition.FilterWay == FilterWay.Keep && condition.FilterColumns.Count == 0) ||
                    (condition.FilterWay == FilterWay.Keep && condition.FilterColumns.Contains(attr)))
                {
                    attrList.Add(attr);
                }
            }
            string sqlTemplate = "SELECT {0} FROM {1}";
            string sqlText     = string.Format(sqlTemplate, string.Join(",", attrList), condition.TableName);

            if (condition.Expression != null)
            {
                sqlText += condition.Expression.GenerateSqlText();
            }
            if (condition.OrderColumns != null && condition.OrderColumns.Count > 0)
            {
                sqlText = sqlText + string.Format(" ORDER BY {0} ", string.Join(",", condition.OrderColumns)) + condition.OrderBy.ToString();
            }
            string connStr = SqlServerConnectionProvider.Instance.GetConnectionString(condition.ConnectionName);

            return(SqlServerBaseOrder.ExecuteReader <T>(connStr, sqlText));
        }
        public Dictionary <string, EntityBase> QueryEntityDic(string connectionName = null)
        {
            Dictionary <string, EntityBase> dic = new Dictionary <string, EntityBase>();

            List <EntityBase>          entities   = SqlServerBaseOrder.ExecuteReader <EntityBase>(SqlServerConnectionProvider.Instance.GetConnectionString(connectionName), "SELECT * FROM EntityBase");
            List <EntityAttributeBase> attributes = SqlServerBaseOrder.ExecuteReader <EntityAttributeBase>(SqlServerConnectionProvider.Instance.GetConnectionString(connectionName), "SELECT * FROM EntityAttributeBase");

            foreach (EntityBase entity in entities)
            {
                if (!dic.ContainsKey(entity.EntityName))
                {
                    foreach (EntityAttributeBase attr in attributes)
                    {
                        if (string.Equals(entity.Id, attr.EntityId))
                        {
                            entity.Attributes.Add(attr.AttributeName, attr);
                        }
                    }
                    dic.Add(entity.EntityName, entity);
                }
            }

            return(dic);
        }