示例#1
0
        private string ToJsQuery(List <FormReportColumSetting> rows, string db_name)
        {
            var tableList            = new List <TableModel>();
            var tableNotAutoJoinList = new List <TableModel>();
            var queryConditionList   = new List <QueryCondition>();

            var tableRelationList = new List <TableRelationModel>();

            var reportDataBase = db_name;
            var jsQeury        = new List <string>();

            var columnIndex = 0;
            var tableIndex  = 0;
            var gp          = rows.GroupBy(a => a.TableName).OrderByDescending(b => b.AsEnumerable().Count(bb => bb.ForeignKey.HasValue()));

            gp.ToList().ForEach(g =>
            {
                var currntTableName    = g.Key;            //表名称
                var currntTableColumns = g.AsEnumerable(); //当前表的列集合
                if (tableIndex == 0)
                {                                          //主表
                    jsQeury.Add(string.Format("'{0}.{1}@list'", reportDataBase, currntTableName));
                }
                else
                {
                    var pk     = rows.FirstOrDefault(t => t.TableName == g.Key && t.IsPrimaryKey);
                    var pkName = pk == null ? "请勾选" + currntTableName + "的主键" : pk.ColumName;
                    string fkName;
                    string fkTableName;
                    //找该表引用的表
                    var currentTableQuote = currntTableColumns.Where(c => c.ForeignKey.HasValue()).ToList();
                    if (currentTableQuote.Any())
                    {//找到有引用的表-寻找引用表
                        var quotedTable = currentTableQuote.FirstOrDefault(t => gp.Select(gg => gg.Key).Contains(t.ColumName));
                        if (quotedTable == null)
                        {//在勾选的表中没有匹配到
                            fkTableName = "目标表";
                            fkName      = "目标列";
                        }
                        else
                        {
                            fkName      = quotedTable.ColumName;
                            fkTableName = quotedTable.TableName;
                        }
                    }
                    else
                    {//未找到有引用的表
                        fkTableName = "目标表";
                        fkName      = "目标列";
                    }
                    jsQeury.Add(string.Format(".jn('{0}.{1}','{2}.{3}')",
                                              currntTableName, pkName, fkTableName, fkName
                                              ));
                }
                tableIndex++;
            });
            //查询条件
            rows.Where(o => o.QuerType != QueryTypeEnum.None).ToList().ForEach(oo =>
            {
                var tp = new QueryCondition()
                {
                    ColumName = oo.ColumName,
                    TableName = oo.TableName,
                    QueryType = oo.QuerType
                };
                jsQeury.Add(tp.ToJsString(0));
            }
                                                                               );

            return(jsQeury.PackString(""));
//                foreach (var obj in rows)
//                {


            //                //加入tables
            //                    var hasPk = rows.FirstOrDefault(a => a.IsPrimaryKey);
            //                    if (hasPk != null)
            //                    {
            //                        var columName = hasPk.ColumName;
            //                        if (columName != null)
            //                        {
            //                            tableList.AddIfNotExsit(obj.TableName, columName);

            //                            //加入relation
            //                            if (obj.ForeignTable.HasValue())
            //                            {
            //                                tableRelationList.AddIfNotExsit(obj.TableName, obj.ColumName, obj.ColumNote,
            //                                    obj.ForeignTable, obj.ForeignKey);
            //                            }
            //                            else
            //                            {
            //                                tableNotAutoJoinList.AddIfNotExsit(obj.TableName, columName);


            //                            }
            //                        }
            //                    }

            //                    //计数累加
            //                columnIndex++;
            //                }

            //                //生成jn
            //                tableRelationList.ForEach(r =>
            //                {
            //                    jsQeury.Add(r.ToJsString()); //连表

            //                });
            //            //生成jn
            //            tableNotAutoJoinList.ForEach(r =>
            //            {
            //                if(tableRelationList.All(g => g.ColumName != r.TableName))
            //                jsQeury.Add(string.Format(".jn('{0}.{1}','目标表.目标列')", r.TableName,r.PkName));

            //            });
            //            //生成查询条件
            //            for (var i = 0; i < queryConditionList.Count; i++)
            //                {
            //                    var t = queryConditionList[i];
            //                    if (t.CanQuery)
            //                    {
            //                    jsQeury.Add(t.ToJsString(i));//加条件

            //                   }
            //                }
            //            //final
            //            var allTable = tableRelationList;;
            //            tableNotAutoJoinList.ForEach(a =>
            //            {
            //                if (allTable.All(item => item.TableName != a.TableName))
            //                {
            //                    allTable.Add(new TableRelationModel() { TableName = a.TableName, PkName = a.PkName,ForeginTableName = "目标表",ForeginColumName = "目标列"});
            //                }
            //            });


            //            if (!allTable.Any())
            //            {
            //                return "请在左侧勾选数据表";
            //            }
            //            else if (allTable.Count() == 1)
            //            {
            ////单表
            //                return string.Format("'{0}.{1}@list'", reportDataBase, (tableNotAutoJoinList.Any()
            //                    ? tableNotAutoJoinList[0].TableName
            //                    : tableRelationList[0].TableName));
            //            }
            //            else
            //            {//多表
            //                if (tableNotAutoJoinList.Any() || tableRelationList.Any())
            //                {
            //                    if (tableRelationList.Any())
            //                    {//有关系

            //                        return string.Format("'{0}.{1}@list'{2}", reportDataBase,
            //                        tableRelationList[0].TableName, jsQeury.Where(a => !a.Contains(tableRelationList[0].ToJsString())).
            //                        //Where(a => !a.Contains(string.Format(".jn('{0}.{1}','目标表.目标列')", tableRelationList[0].TableName, tableRelationList[0].ColumName))).
            //                                ToList().PackString(""));

            //                        //if (tableRelationList.Count() == allTable.Count)
            //                        //{


            //                        //}
            //                        //else
            //                        //{
            //                        //    ////部分有关系-把有关系的放前面且过滤掉第一个
            //                        //    //return string.Format("'{0}.{1}@list'{2}", reportDataBase,
            //                        //    //    tableRelationList[0].TableName, jsQeury.
            //                        //    //         Where(a => !a.Contains(tableRelationList[0].ToJsString())).
            //                        //    //    ToList().PackString(""));
            //                        //}


            //                    }
            //                    else
            //                    {//均无关系
            //                        return string.Format("'{0}.{1}@list'{2}", reportDataBase,
            //                           tableNotAutoJoinList[0].TableName, jsQeury.
            //                           Where(a => !a.Contains(string.Format(".jn('{0}.{1}','目标表.目标列')", tableNotAutoJoinList[0].TableName, tableNotAutoJoinList[0].PkName))).
            //                           ToList().PackString(""));
            //                    }
            //                }
            //            }



            //    return "请在左侧勾选数据表";
        }