public DatabaseParameterLink AppendCollection(DatabaseParameter parameter, DatabaseParameterRelation relation = DatabaseParameterRelation.AND) { var link = new DatabaseParameterLinkCollection(parameter, relation); Next = link; return(link.Content); }
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)); }
public DatabaseParameterLinkCollection AppendCollection(DatabaseParameterRelation relation = DatabaseParameterRelation.AND) { var link = new DatabaseParameterLinkCollection() { Releation = relation }; Next = link; return(link); }
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]); }
public DatabaseParameterLink Append(DatabaseParameter parameter, DatabaseParameterRelation relation = DatabaseParameterRelation.AND) { var link = new DatabaseParameterLink() { Parameter = parameter, Releation = relation }; Next = link; return(link); }
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); }
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); }
public async Task <List <T> > QueryLike <T>(IDatabaseParameterLink link) where T : class, new() { return(await dao.QueryLike <T>(link)); }