private void Clear() { SqlBuilder.Clear(); JoinRelations.Clear(); WhereClause.Clear(); Parameters.Clear(); OrderByFields.Clear(); GroupByFields.Clear(); SelectFields.Clear(); }
public JoinQuery GroupBy <T1, T2, T3>(Expression <Func <T1, T2, T3, dynamic> > select = null) { DynamicVisitor visitor = new DynamicVisitor(WithAlias); visitor.Translate(select); foreach (DynamicMember c in visitor.DynamicMembers) { GroupByFields.AppendFormat("{0},", c.Field); } return(this); }
public IndexDefinitionBase CreateAutoIndexDefinition() { if (IsMapReduce == false) { return(new AutoMapIndexDefinition(ForCollection, MapFields.Select(field => new IndexField { Name = field.Name, Storage = FieldStorage.No, SortOption = SortDescriptors.FirstOrDefault(x => field.Name.Equals(x.Name))?.FieldType, Highlighted = HighlightedFields.Any(x => field.Name.Equals(x)) }).ToArray())); } if (MapFields.Length == 0) { throw new InvalidOperationException("Invalid dynamic map-reduce query mapping. There is no aggregation specified."); } if (GroupByFields.Length == 0) { throw new InvalidOperationException("Invalid dynamic map-reduce query mapping. There is no group by field specified."); } return(new AutoMapReduceIndexDefinition(new[] { ForCollection }, MapFields.Select(field => new IndexField { Name = field.Name, Storage = FieldStorage.Yes, MapReduceOperation = field.MapReduceOperation, SortOption = SortDescriptors.FirstOrDefault(x => field.Name.Equals(x.Name))?.FieldType, }).ToArray(), GroupByFields.Select(field => new IndexField { Name = field, Storage = FieldStorage.Yes, SortOption = SortDescriptors.FirstOrDefault(x => field.Equals(x.Name))?.FieldType, }).ToArray())); }
/// <summary> /// 多表连查分页 /// </summary> /// <typeparam name="TModel"></typeparam> /// <param name="page"></param> /// <returns></returns> public PageDataSource <TModel> GetPage <TModel>(PageFilter page) { List <JoinRelation> tables = new List <JoinRelation>(); SqlBuilder.AppendFormat(" SELECT {0} FROM {1}", SelectFields.ToString().TrimEnd(','), JoinRelations[0].LeftTable); if (WithAlias) { SqlBuilder.AppendFormat(" AS {0}", JoinRelations[0].LeftTableAlias); } foreach (JoinRelation j in JoinRelations) { if (j.JoinType == JoinType.Outer) { SqlBuilder.Append(" LEFT OUTER JOIN "); } else { SqlBuilder.Append(" INNER JOIN "); } if (WithAlias) { if (tables.Count(m => m.LeftTableAlias == j.RightTableAlias || m.RightTableAlias == j.RightTableAlias) == 0) { SqlBuilder.AppendFormat("{0} AS {1}", j.RightTable, j.RightTableAlias); tables.Add(j); } else { SqlBuilder.AppendFormat("{0} AS {1}", j.LeftTable, j.LeftTableAlias); tables.Add(j); } } else { if (tables.Count(m => m.LeftTable == j.RightTable || m.RightTable == j.RightTable) == 0) { SqlBuilder.Append(j.RightTable); tables.Add(j); } else { SqlBuilder.Append(j.LeftTable); tables.Add(j); } } SqlBuilder.AppendFormat(" ON {0}", j.OnSql.TrimEnd("AND".ToCharArray())); } if (WhereClause.Length > 0) { SqlBuilder.AppendFormat(" WHERE {0}", WhereClause.ToString().Trim().TrimEnd("AND".ToCharArray())); } if (GroupByFields.Length > 0) { SqlBuilder.AppendFormat(" GROUP BY {0}", GroupByFields.ToString().Trim().TrimEnd(',')); } if (OrderByFields.Length > 0) { page.OrderText = OrderByFields.ToString().Trim().TrimEnd(','); } //开始组装sql //开始组装sql PageDataSource <TModel> result = DbContext.GetPage <TModel>(SqlBuilder.ToString(), page, Parameters.ToArray()); if (this.IsAutoDisposeDbContext) { DbContext.Dispose(); } return(result); }
/// <summary> /// 返回数量 /// </summary> /// <returns></returns> public int GetCount() { List <JoinRelation> tables = new List <JoinRelation>(); SqlBuilder.AppendFormat(" SELECT COUNT(1) AS CT FROM {0}", JoinRelations[0].LeftTable); if (WithAlias) { SqlBuilder.AppendFormat(" AS {0}", JoinRelations[0].LeftTableAlias); } foreach (JoinRelation j in JoinRelations) { if (j.JoinType == JoinType.Outer) { SqlBuilder.Append(" LEFT OUTER JOIN "); } else { SqlBuilder.Append(" INNER JOIN "); } if (WithAlias) { if (tables.Count(m => m.LeftTableAlias == j.RightTableAlias || m.RightTableAlias == j.RightTableAlias) == 0) { SqlBuilder.AppendFormat("{0} AS {1}", j.RightTable, j.RightTableAlias); tables.Add(j); } else { SqlBuilder.AppendFormat("{0} AS {1}", j.LeftTable, j.LeftTableAlias); tables.Add(j); } } else { if (tables.Count(m => m.LeftTable == j.RightTable || m.RightTable == j.RightTable) == 0) { SqlBuilder.Append(j.RightTable); tables.Add(j); } else { SqlBuilder.Append(j.LeftTable); tables.Add(j); } } SqlBuilder.AppendFormat(" ON {0}", j.OnSql.TrimEnd("AND".ToCharArray())); } if (WhereClause.Length > 0) { SqlBuilder.AppendFormat(" WHERE {0}", WhereClause.ToString().Trim().TrimEnd("AND".ToCharArray())); } if (GroupByFields.Length > 0) { SqlBuilder.AppendFormat(" GROUP BY {0}", GroupByFields.ToString().Trim().TrimEnd(',')); } if (OrderByFields.Length > 0) { SqlBuilder.AppendFormat(" ORDER BY {0}", OrderByFields.ToString().Trim().TrimEnd(',')); } //开始组装sql int result = DbContext.GetSingle <int>(SqlBuilder.ToString(), Parameters.ToArray()); if (this.IsAutoDisposeDbContext) { DbContext.Dispose(); } return(result); }