如何导出一张表里的同字段的多个字段值 --- 递归

如何导出一张表里的同字段的多个字段的值呢?我在这里用到的是递归的方法,那么问题又来了,什么是递归呢?
顾名思义,递归从字面的理解就是一层一层地传递下去,其实也是这样的,递归的定义就是:
在函数的定义中使用函数自身的方法。看着这个定义确实难以理解,不过可以理解为循环的渐进,在使用递归的时候,需要注意的是要定义一个从函数退出的条件,否则会进入死循环。
那么接下来看一下递归的用法,首先来看一下例子的问题和效果图。
例子:我要在导出供应商信息的时候,将供应商分类分四级导出Excel表格。
数据库表和供应商分类的树形图:
在这里插入图片描述
在这里插入图片描述
效果图:
在这里插入图片描述
如上图,供应商小思是在一级默认分类里面的,而夏鸥是在一级分类默认分类下面的二级分类里面的供应商。
那么是怎么做到的呢?
步骤:1、在导出的时候首先是进行数据的查询与筛选。
2、然后通过查询出来的数据拿来foreach循环,通过foreach循环找出供应商名称和
供应商父级ID,对供应商名称进行拼接。
3、对拼接好的供应商名称进行分割,判断供应商分类名称的长度即一个供应商有哪几个分类
下面。

4、最后就对分类名称赋值(剩下就是导出数据的常规步骤,在这里就不多讲了,可以看我
的前几期文献)。
代码:

string SupplierTypeName = "";    //定义一个变量来接收供应商分类名称
string[] SupplierTypeNameAll;   //定义一个变量来接收分割完的分类名称
//数据查询&条件筛选
List<supplierVo> listSupplier = (from tbSupplier in myModels.PW_Supplier
       join tbSupplierType in myModels.SYS_SupplierType on tbSupplier.SupplierTypeID equals tbSupplierType.SupplierTypeID
       orderby tbSupplier.SupplierID
       select new supplierVo{
                SupplierID = tbSupplier.SupplierID,  //供应商ID
                SupplierTypeID = tbSupplierType.SupplierTypeID,  //供应商分类ID
                SupplierTypeName = "",  //供应商分类名称
                SupplierNum = tbSupplier.SupplierNum,  //供应商编号
                SupplierName = tbSupplier.SupplierName,   //供应商名称
       }).ToList();
foreach (var item in listSupplier){
     for (int i = 0; i < 20; i++){
           try{
                  //通过供应商分类ID进行查询数据
                  SYS_SupplierType SupplierType = (from tbSupplier in myModels.SYS_SupplierType
                                                   where tbSupplier.SupplierTypeID == item.SupplierTypeID
                                                   select tbSupplier).Single();
                  SupplierTypeName = SupplierType.SupplierTypeName;
                  item.SupplierTypeID = SupplierType.SupplierParentID;
                  item.SupplierTypeName = SupplierTypeName+">"+item.SupplierTypeName; //拼接分类名称
            }
            catch (Exception){
                 SupplierTypeNameAll = item.SupplierTypeName.Split('>'); //分割名称 
                 //因为我这里供应商分类是第一个分类,而我要导出的时候实际是第一个分类下的分类,所以当这里的长度为1时就一到四级分类为空,导出的一级分类实际上是数据库中的二级分类
		         if (SupplierTypeNameAll.Length == 1){ 
		                    item.SupplierTypeName1 = "";   //一级分类名称
		                    item.SupplierTypeName2 = "";   //二级分类名称
		                    item.SupplierTypeName3 = "";   //三级分类名称
		                    item.SupplierTypeName4 = "";   //四级分类名称
		          }
		          else if (SupplierTypeNameAll.Length == 2){ 
		                    item.SupplierTypeName1 = SupplierTypeNameAll[1];
		                    item.SupplierTypeName2 = "";
		                    item.SupplierTypeName3 = "";
		                    item.SupplierTypeName4 = "";
		           }
		           else if (SupplierTypeNameAll.Length == 3) {
		                    item.SupplierTypeName1 = SupplierTypeNameAll[1];
		                    item.SupplierTypeName2 = SupplierTypeNameAll[2];
		                    item.SupplierTypeName3 = "";
		                    item.SupplierTypeName4 = "";
		           }
		          else if (SupplierTypeNameAll.Length == 4) {
		                     item.SupplierTypeName1 = SupplierTypeNameAll[1];
		                     item.SupplierTypeName2 = SupplierTypeNameAll[2];
		                     item.SupplierTypeName3 = SupplierTypeNameAll[3];
		                           item.SupplierTypeName4 = "";
		           }
		           else{
		                     item.SupplierTypeName1 = SupplierTypeNameAll[1];
		                     item.SupplierTypeName2 = SupplierTypeNameAll[2];
		                     item.SupplierTypeName3 = SupplierTypeNameAll[3];
		                     item.SupplierTypeName4 = SupplierTypeNameAll[4];
		            }
               break;
          }
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值