示例#1
0
        public DatabaseParameterLink AppendCollection(DatabaseParameter parameter,
                                                      DatabaseParameterRelation relation = DatabaseParameterRelation.AND)
        {
            var link = new DatabaseParameterLinkCollection(parameter, relation);

            Next = link;

            return(link.Content);
        }
示例#2
0
        public async Task <List <T> > QueryLike <T>(IDatabaseParameterLink link, int?recordCount = null) where T : class, new()
        {
            var mapper = EntityMetaDataMapper.GetInstance();

            // 获取组装好的sql和参数
            (string sql, List <DatabaseParameter> parameters) =
                SqlBuilderFactory.GetInstance <T>().BuildSelect <T>(link, recordCount);
            var dataSet = await DalClientFactory.GetClient(GetLogicDatabaseName <T>()).Query(sql, parameters);

            return(mapper.Convert <T>(dataSet));
        }
示例#3
0
        public DatabaseParameterLinkCollection AppendCollection(DatabaseParameterRelation relation = DatabaseParameterRelation.AND)
        {
            var link = new DatabaseParameterLinkCollection()
            {
                Releation = relation
            };

            Next = link;

            return(link);
        }
示例#4
0
        public async Task <T> QueryFirst <T>(IDatabaseParameterLink parameters) where T : class, new()
        {
            var list = await dao.QueryLike <T>(parameters, 1);

            if (list == null || list.Count == 0)
            {
                return(null);
            }

            return(list[0]);
        }
示例#5
0
        public DatabaseParameterLink Append(DatabaseParameter parameter,
                                            DatabaseParameterRelation relation = DatabaseParameterRelation.AND)
        {
            var link = new DatabaseParameterLink()
            {
                Parameter = parameter,
                Releation = relation
            };

            Next = link;

            return(link);
        }
示例#6
0
        public (string, List <DatabaseParameter>) BuildSelect <T>(IDatabaseParameterLink link, int?recordCount = null) where T : new()
        {
            // 先组装出基本Sql语句
            var sql = GetPrimarySql <T>();

            if (link == null)
            {
                if (recordCount != null && recordCount > 0)
                {
                    sql += $" limit {recordCount};";
                }

                return(sql, null);
            }

            (var subsql, var parameters) = Build(link);
            sql = string.Concat(sql, " WHERE ", subsql);
            if (recordCount != null && recordCount > 0)
            {
                sql += $" limit {recordCount};";
            }

            return(sql, parameters);
        }
示例#7
0
        public (string, List <DatabaseParameter>) Build(IDatabaseParameterLink link)
        {
            if (link == null)
            {
                return(string.Empty, null);
            }

            List <DatabaseParameter> list = new List <DatabaseParameter>();

            var sql = new StringBuilder();

            if (link is DatabaseParameterLink parameterLink)
            {
                var operation = parameterLink.Parameter.Operation;
                if (parameterLink.Parameter.Value == null)
                {
                    operation = "IS NULL";
                }
                else if (typeof(ICollection).IsAssignableFrom(parameterLink.Parameter.Value.GetType()))
                {
                    var collection = parameterLink.Parameter.Value as ICollection;
                    var s          = new StringBuilder(collection.Count * 2);
                    foreach (var item in collection)
                    {
                        s.Append("?");
                        s.Append(",");
                    }
                    s.Remove(s.Length - 1, 1);

                    operation = $"IN ({s.ToString()})";
                }
                else
                {
                    operation = $"{parameterLink.Parameter.Operation} ?";
                }

                sql.Append($"{link.Releation} `{parameterLink.Parameter.Name}` {operation} ");
                list.Add(parameterLink.Parameter);
            }
            else if (link is DatabaseParameterLinkCollection parameterCollection)
            {
                sql.Append(parameterCollection.Releation);
                sql.Append(" (");

                (var contentsql, var contentparam) = Build(parameterCollection.Content);

                sql.Append(contentsql);
                if (contentparam != null)
                {
                    list.AddRange(contentparam);
                }
                sql.Append(") ");
            }

            (var subsql, var param) = Build(link.Next);
            sql.Append(subsql);
            if (param != null)
            {
                list.AddRange(param);
            }

            return(sql.ToString(), list);
        }
示例#8
0
 public async Task <List <T> > QueryLike <T>(IDatabaseParameterLink link) where T : class, new()
 {
     return(await dao.QueryLike <T>(link));
 }