
在数据库中维度关联字段是由多个字段拼接进行关联的,多个关联的数据为1个id,在其他数据库表进行引用辅助属性和仓位时需要使用id进行匹配,下面方法为格式化Fcalcol字段的方法。
## 仓位
```c#
//参数仓位匹配的两个字段的map集合,其中包含number('FF100001')字段和id('100001')字段
private string GetPositionsCalCol(Dictionary<string,string> dict)
{
string fCalCol = "";
//获取仓位的属性,然后根据属性进行拼接
var sql = string.Format("select * from T_BAS_FLEXVALUES");
var valList = DBServiceHelper.ExecuteDynamicObject(_context.Session.AppContext, sql);
for (int i = 0; i < valList.Count; i++)
{
//判断是否存在‘FF100001’字段
if (valList[i] != null && dict.ContainsKey(valList[i]["FFLEXNUMBER"].ToString()))
{
fCalCol += dict[valList[i]["FFLEXNUMBER"].ToString()] ;
//这里存在转移字段,可根据数据库查询的fcalcol字段进行修改,最后以为不需要添加分隔符
if (i< valList.Count-1)
{
fCalCol += "<]";
}
}
else
{
fCalCol += "0";
if (i < valList.Count - 1)
{
fCalCol += "<]";
}
}
}
return fCalCol;
}
```
## 辅助属性
辅助属性比仓位多查询的步骤就是,你需要在查询完成后对非基础资料,辅助资料字段进行拼接查询。
最后根据fcalcol和最后拼接好的数据库语句查询到id
```c#
private Dictionary<string, string> GetAuxAttributeCalCol(Dictionary<string, string> dict)
{
Dictionary<string,string> keyValuePairs = new Dictionary<string,string>();
string fCalCol = "";
var filterStringByType = new List<string>();
var sql = string.Format("select * from T_BD_FLEXAUXPROPERTY");
var valList = DBServiceHelper.ExecuteDynamicObject(_context.Session.AppContext, sql);
for (int i = 0; i < valList.Count; i++)
{
if (valList[i] != null && valList[i]["FVALUETYPE"]!=null && valList[i]["FVALUETYPE"].ToString()== "0")
{
if (dict.ContainsKey(valList[i]["FFLEXNUMBER"].ToString()))
{
fCalCol += dict[valList[i]["FFLEXNUMBER"].ToString()];
if (i < valList.Count - 1)
{
fCalCol += "<]";
}
}
else
{
fCalCol += "0";
if (i < valList.Count - 1)
{
fCalCol += "<]";
}
}
}
else if (valList[i] != null && valList[i]["FVALUETYPE"] != null && valList[i]["FVALUETYPE"].ToString() == "1")
{
if (dict.ContainsKey(valList[i]["FFLEXNUMBER"].ToString()))
{
fCalCol += dict[valList[i]["FFLEXNUMBER"].ToString()];
if (i < valList.Count - 1)
{
fCalCol += "<]";
}
}
else
{
if (i < valList.Count - 1)
{
fCalCol += "<]";
}
}
}
else if(valList[i] != null && valList[i]["FVALUETYPE"] != null && valList[i]["FVALUETYPE"].ToString() == "2")
{
//拼接筛选语句
if (dict.ContainsKey(valList[i]["FFLEXNUMBER"].ToString()))
{
filterStringByType.Add(string.Format("{0} = '{1}'", valList[i]["FFLEXNUMBER"].ToString(), dict[valList[i]["FFLEXNUMBER"].ToString()]));
}
}
}
keyValuePairs.Add("FCalCol", fCalCol);
keyValuePairs.Add("filterStringByType",string.Join(" and ", filterStringByType.ToArray()));
return keyValuePairs;
}
```