默认加载所有的数据,结构长这个样子的。
数据库结构长这个样子的
cParentId=上级ID、
cItemCode=根节点代码、
cItemTitle=根节点名称、
cItemName=子节点名称、
cItemValue=子节点代码
下面就是业务数据处理的相关逻辑:
核心逻辑如下图:
public List<DataItem> GetAllDataItems(string name)
{
if (string.IsNullOrEmpty(name))
{
return _freeSql.Select<DataItem>().ToList();
}
//数据源
var data = _freeSql.Select<DataItem>().ToList();
//条件查询-模糊查询 模糊查询子集 或 模糊查询根节点
var WhereData = _freeSql.Select<DataItem>().Where(a => a.cItemName.Contains(name) || a.cItemTitle.Contains(name) && a.cParentId == "0").ToList();
//根据模糊查询出来的数据进行循环查询
for (int i = 0; i < WhereData.Count; i++)
{
//判断当前节点是否为根节点
if (WhereData[i].cParentId != "0")
{
//根据循环出来的上级ID(cParentId),到数据源里面匹配相对应的ID
var ddl = data.Where(a => a.cId == WhereData[i].cParentId).ToArray();
//判断数据源里面匹配到的数据,是否存在与条件查询的数据源内
var ddm = WhereData.Where(a => a.cId == ddl[0].cId).ToArray();
//如果输入数据源不存在该数据
if (ddm.Length == 0)
{
WhereData.Add(ddl[0]);//进行追加,此时的WhereData.Count也会相应的+1
}
}
}
//输出所有相关的数据
return WhereData;
}