Beispiel #1
0
        public static List <BDOs> ToBDOsModel(PostData postData)
        {
            //取真实表名
            for (int i = 0; i < postData.BusiDatas.Length; i++)
            {
                bf_Busi busi = bf_Busis.GetItem(postData.BusiDatas[i].BusiNo);
                if (busi == null)
                {
                    continue;
                }
                postData.BusiDatas[i].TableName = busi.TableName;
                busi = bf_Busis.GetItem(postData.BusiDatas[i].ParentBusiNo);
                if (busi == null)
                {
                    continue;
                }
                postData.BusiDatas[i].ParentTableName = busi.TableName;
            }
            //按照表关系转换
            List <BDOs>   lstDs       = new List <BDOs>();
            List <string> lstTbInBdos = new List <string>();

            for (int i = 0; i < postData.relations.Length; i++)
            {
                RelationDTO rel  = postData.relations[i];
                BDOs        BDOS = lstDs.Find((b) => b.DataSetName == rel.parentBusiNo);
                if (BDOS == null)
                {
                    BDOs bdos      = null;
                    BDO  bdoParent = null;
                    foreach (BDOs bds in lstDs)
                    {
                        bdoParent = bds[rel.parentBusiNo];
                        if (bdoParent != null)
                        {
                            bdos = bds;
                            break;
                        }
                    }
                    if (bdoParent == null)
                    {
                        bdos      = new BDOs(rel.parentBusiNo);
                        bdoParent = JsonToBDO(bdos, null, rel.parentBusiNo, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.Equals(rel.parentBusiNo)).JsonData);
                        CheckNullValue(bdoParent);
                        bdos.DataSetName = rel.parentBusiNo;
                    }

                    BDO bdoChild = JsonToBDO(bdos, null, rel.name, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.ToUpper().Equals(rel.name.ToUpper())).JsonData);
                    if (bdoParent.Rows.Count == 0)
                    {
                        foreach (DataRow row in bdoChild.Rows)
                        {
                            if (bdoParent.AsEnumerable().FirstOrDefault(f => f[rel.parentCols[0]].Equals(row[rel.childCols[0]])) != null)
                            {
                                continue;
                            }
                            DataRow nr = bdoParent.NewRow();
                            nr[rel.parentCols[0]] = row.RowState == DataRowState.Deleted?row[rel.childCols[0], DataRowVersion.Original]: row[rel.childCols[0]];
                            bdoParent.Rows.Add(nr);
                        }
                        bdoParent.AcceptChanges();
                    }
                    bdoParent.AddChildren(rel.name, bdoChild, rel.parentCols[0], rel.childCols[0]);
                    //CopyRelation(bdos, rel);

                    if (!lstDs.Contains(bdos))
                    {
                        lstDs.Add(bdos);
                        lstTbInBdos.Add(rel.parentBusiNo);
                    }
                    lstTbInBdos.Add(rel.name);
                }
                else
                {
                    BDO bdo = JsonToBDO(BDOS, null, rel.name, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.Equals(rel.name)).JsonData);
                    CheckNullValue(bdo);
                    if (BDOS.MasterBDO.Rows.Count == 0)
                    {
                        foreach (DataRow row in bdo.Rows)
                        {
                            if (BDOS.MasterBDO.AsEnumerable().FirstOrDefault(f => f[rel.parentCols[0]].Equals(row[rel.childCols[0]])) != null)
                            {
                                continue;
                            }
                            DataRow nr = BDOS.MasterBDO.NewRow();
                            nr[rel.parentCols[0]] = row[rel.childCols[0]];
                            BDOS.MasterBDO.Rows.Add(nr);
                        }
                        BDOS.MasterBDO.AcceptChanges();
                    }

                    BDOS.MasterBDO.AddChildren(rel.name, bdo, rel.parentCols[0], rel.childCols[0]);
                    //CopyRelation(BDOS, rel);
                    lstTbInBdos.Add(rel.name);
                }
            }

            //无表关系的单表
            foreach (BusiData bd in postData.BusiDatas)
            {
                if (!lstTbInBdos.Exists((name) => name == bd.BusiNo))
                {
                    BDOs singleBDOs = new BDOs(bd.BusiNo);
                    BDO  bdo        = JsonToBDO(singleBDOs, null, bd.BusiNo, postData.BusiDatas.AsEnumerable().FirstOrDefault(f => f.BusiNo.Equals(bd.BusiNo)).JsonData);
                    CheckNullValue(bdo);
                    singleBDOs.DataSetName = bd.BusiNo;
                    lstDs.Add(singleBDOs);
                }
            }

            return(lstDs);
        }