Exemple #1
0
        public static string GetQueryStr(LibQueryCondition condition, string name, LibDataType dataType, bool needAnd = false, string prefix = "A", string realName = "")
        {
            StringBuilder        builder        = new StringBuilder();
            List <LibQueryField> queryFieldList = new List <LibQueryField>();

            if (condition == null)
            {
                return(builder.ToString());
            }
            foreach (var item in condition.QueryFields)
            {
                if (item.Name.CompareTo(name) == 0)
                {
                    queryFieldList.Add(item);
                }
            }
            int count = queryFieldList.Count;

            if (count > 0)
            {
                for (int i = 0; i < count; i++)
                {
                    BuildQueryStr(dataType, queryFieldList[i], builder, prefix, needAnd || !(i == count - 1), realName);
                }
            }
            if (condition.PowerQueryFieldDic.ContainsKey(name))
            {
                if (!needAnd)
                {
                    builder.Append(" and ");
                }
                BuildPowserQueryStr(dataType, condition.PowerQueryFieldDic[name], builder, prefix, false, realName);
            }
            return(builder.ToString());
        }
Exemple #2
0
        public static string GetQueryData(string progId, LibQueryCondition condition, string prefix = "A", bool useRelativeField = true)
        {
            if (condition == null)
            {
                return(string.Empty);
            }
            StringBuilder builder  = new StringBuilder();
            LibSqlModel   sqlModel = LibSqlModelCache.Default.GetSqlModel(progId);

            if (sqlModel == null)
            {
                throw new ArgumentNullException("sqlModel", "GetQueryData方法解析的progId取不到sqlModel");
            }
            LibSqlModelTable table = (LibSqlModelTable)sqlModel.Tables[0];



            foreach (LibQueryField queryField in condition.QueryFields)
            {
                if (!table.Columns.Contains(queryField.Name))
                {
                    continue;
                }
                LibSqlModelColumn col = (LibSqlModelColumn)table.Columns[queryField.Name];
                if (col.ExtendedProperties.ContainsKey(FieldProperty.FieldType))
                {
                    FieldType fieldType = (FieldType)col.ExtendedProperties[FieldProperty.FieldType];
                    if (FieldType.Virtual == fieldType)
                    {
                        continue;
                    }
                    if (!useRelativeField && FieldType.Relative == fieldType)
                    {
                        continue;
                    }
                }
                LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType];
                BuildQueryStr(dataType, queryField, builder, prefix, true, string.Empty);
                //加入权限
                if (condition.PowerQueryFieldDic.ContainsKey(queryField.Name))
                {
                    BuildPowserQueryStr(dataType, condition.PowerQueryFieldDic[queryField.Name], builder, prefix, true, string.Empty);
                }
            }
            if (builder.Length > 0)
            {
                builder.Remove(builder.Length - 4, 4);
            }
            return(builder.ToString());
        }
Exemple #3
0
        public static List <LibQueryField> GetQueryField(LibQueryCondition condition, string name)
        {
            List <LibQueryField> queryFieldList = new List <LibQueryField>();

            if (condition == null)
            {
                return(queryFieldList);
            }
            foreach (var item in condition.QueryFields)
            {
                if (item.Name.CompareTo(name) == 0)
                {
                    queryFieldList.Add(item);
                }
            }
            return(queryFieldList);
        }
Exemple #4
0
        public static LibQueryCondition MergeQueryCondition(DataTable table, LibQueryCondition condition, Dictionary <string, List <LibQueryField> > powerQueryFieldDic)
        {
            if (powerQueryFieldDic == null || powerQueryFieldDic.Count == 0)
            {
                return(condition);
            }
            if (condition == null || condition.QueryFields.Count == 0)
            {
                condition = new LibQueryCondition();
                foreach (var item in powerQueryFieldDic)
                {
                    foreach (var subItem in item.Value)
                    {
                        condition.QueryFields.Add(subItem);
                    }
                }
                return(condition);
            }
            List <LibQueryField> addList    = new List <LibQueryField>();
            List <string>        removeList = new List <string>();

            //将权限(仅存在一个权限设定,即非or的情况)合并到当前用户的选择条件中
            foreach (var powerQuery in powerQueryFieldDic)
            {
                if (powerQuery.Value.Count == 1)
                {
                    bool          exist = false;
                    LibQueryField other = powerQuery.Value[0];
                    foreach (var item in condition.QueryFields)
                    {
                        if (item.Name == powerQuery.Key)
                        {
                            exist = true;
                            DataColumn  col      = table.Columns[item.Name];
                            LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType];
                            switch (dataType)
                            {
                            case LibDataType.Text:
                            case LibDataType.NText:
                            case LibDataType.Binary:
                                string curStr1   = item.Value[0].ToString();
                                string otherStr1 = other.Value[0].ToString();
                                string curStr2   = string.Empty;
                                string otherStr2 = string.Empty;
                                if (item.Value.Count == 2)
                                {
                                    curStr2 = item.Value[1].ToString();
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherStr2 = other.Value[1].ToString();
                                }
                                MergeFieldQuery(addList, item, other, curStr1, otherStr1, curStr2, otherStr2);
                                break;

                            case LibDataType.Int32:
                                int curInt1   = LibSysUtils.ToInt32(item.Value[0]);
                                int otherInt1 = LibSysUtils.ToInt32(other.Value[0]);
                                int curInt2   = 0;
                                int otherInt2 = 0;
                                if (item.Value.Count == 2)
                                {
                                    curInt2 = LibSysUtils.ToInt32(item.Value[1]);
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherInt2 = LibSysUtils.ToInt32(other.Value[1]);
                                }
                                MergeFieldQuery(addList, item, other, curInt1, otherInt1, curInt2, otherInt2);
                                break;

                            case LibDataType.Int64:
                                long curLong1   = LibSysUtils.ToInt64(item.Value[0]);
                                long otherLong1 = LibSysUtils.ToInt64(other.Value[0]);
                                long curLong2   = 0;
                                long otherLong2 = 0;
                                if (item.Value.Count == 2)
                                {
                                    curLong2 = LibSysUtils.ToInt64(item.Value[1]);
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherLong2 = LibSysUtils.ToInt64(other.Value[1]);
                                }
                                MergeFieldQuery(addList, item, other, curLong1, otherLong1, curLong2, otherLong2);
                                break;

                            case LibDataType.Numeric:
                                decimal curDecimal1   = LibSysUtils.ToDecimal(item.Value[0]);
                                decimal otherDecimal1 = LibSysUtils.ToDecimal(other.Value[0]);
                                decimal curDecimal2   = 0;
                                decimal otherDecimal2 = 0;
                                if (item.Value.Count == 2)
                                {
                                    curDecimal2 = LibSysUtils.ToDecimal(item.Value[1]);
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherDecimal2 = LibSysUtils.ToDecimal(other.Value[1]);
                                }
                                MergeFieldQuery(addList, item, other, curDecimal1, otherDecimal1, curDecimal2, otherDecimal2);
                                break;

                            case LibDataType.Float:
                                float curFloat1   = LibSysUtils.ToSingle(item.Value[0]);
                                float otherFloat1 = LibSysUtils.ToSingle(other.Value[0]);
                                float curFloat2   = 0;
                                float otherFloat2 = 0;
                                if (item.Value.Count == 2)
                                {
                                    curFloat2 = LibSysUtils.ToSingle(item.Value[1]);
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherFloat2 = LibSysUtils.ToSingle(other.Value[1]);
                                }
                                MergeFieldQuery(addList, item, other, curFloat1, otherFloat1, curFloat2, otherFloat2);
                                break;

                            case LibDataType.Double:
                                double curDouble1   = LibSysUtils.ToDouble(item.Value[0]);
                                double otherDouble1 = LibSysUtils.ToDouble(other.Value[0]);
                                double curDouble2   = 0;
                                double otherDouble2 = 0;
                                if (item.Value.Count == 2)
                                {
                                    curDouble2 = LibSysUtils.ToDouble(item.Value[1]);
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherDouble2 = LibSysUtils.ToDouble(other.Value[1]);
                                }
                                MergeFieldQuery(addList, item, other, curDouble1, otherDouble1, curDouble2, otherDouble2);
                                break;

                            case LibDataType.Byte:
                                byte curByte1   = LibSysUtils.ToByte(item.Value[0]);
                                byte otherByte1 = LibSysUtils.ToByte(other.Value[0]);
                                byte curByte2   = 0;
                                byte otherByte2 = 0;
                                if (item.Value.Count == 2)
                                {
                                    curByte2 = LibSysUtils.ToByte(item.Value[1]);
                                }
                                if (other.Value.Count == 2)
                                {
                                    otherByte2 = LibSysUtils.ToByte(other.Value[1]);
                                }
                                MergeFieldQuery(addList, item, other, curByte1, otherByte1, curByte2, otherByte2);
                                break;

                            case LibDataType.Boolean:
                                item.QueryChar = other.QueryChar;
                                item.Value     = other.Value;
                                break;
                            }
                            break;
                        }
                    }
                    if (!exist)
                    {
                        condition.QueryFields.Add(other);
                        removeList.Add(powerQuery.Key);
                    }
                }
            }
            foreach (var item in addList)
            {
                condition.QueryFields.Add(item);
            }

            //仅添加合并后剩余的权限条件(仅剩下or条件的权限)
            foreach (var item in powerQueryFieldDic)
            {
                if (!removeList.Contains(item.Key))
                {
                    condition.PowerQueryFieldDic.Add(item.Key, item.Value);
                }
            }
            return(condition);
        }