private void FillAllChildrenRelationsRecursively(SCSimpleRelationObjectCollection relations, InSqlClauseBuilder builder, LoadingRelationsRecursivelyHandler handler, object context) { if (builder.Count > 0) { string sql = string.Format("SELECT ParentID, ObjectID FROM {0} WHERE {1} AND VersionStartTime <= GETDATE() AND VersionEndTime > GETDATE() AND STATUS = 1", GetMappingInfo().TableName, builder.ToSqlStringWithInOperator(TSqlBuilder.Instance)); DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0]; SCSimpleRelationObjectCollection tempRelations = new SCSimpleRelationObjectCollection(); ORMapping.DataViewToCollection(tempRelations, table.DefaultView); InSqlClauseBuilder subBuilder = new InSqlClauseBuilder("ParentID"); foreach (SCSimpleRelationObject r in tempRelations) { subBuilder.AppendItem(r.ID); relations.Add(r); } if (handler != null) { handler(tempRelations, context); } FillAllChildrenRelationsRecursively(relations, subBuilder, handler, context); } }
/// <summary> /// 递归获取所有子对象的关系 /// </summary> /// <param name="obj"></param> /// <param name="handler"></param> /// <param name="context"></param> /// <returns></returns> public SCSimpleRelationObjectCollection LoadAllChildrenRelationsRecursively(SchemaObjectBase obj, LoadingRelationsRecursivelyHandler handler, object context) { obj.NullCheck("obj"); SCSimpleRelationObjectCollection result = new SCSimpleRelationObjectCollection(); InSqlClauseBuilder builder = new InSqlClauseBuilder("ParentID"); builder.AppendItem(obj.ID); FillAllChildrenRelationsRecursively(result, builder, handler, context); return(result); }