如何导出一张表里的同字段的多个字段的值呢?我在这里用到的是递归的方法,那么问题又来了,什么是递归呢?
顾名思义,递归从字面的理解就是一层一层地传递下去,其实也是这样的,递归的定义就是:
在函数的定义中使用函数自身的方法。看着这个定义确实难以理解,不过可以理解为循环的渐进,在使用递归的时候,需要注意的是要定义一个从函数退出的条件,否则会进入死循环。
那么接下来看一下递归的用法,首先来看一下例子的问题和效果图。
例子:我要在导出供应商信息的时候,将供应商分类分四级导出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;
}
}
}