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()); }
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()); }
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); }
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); }