private static ConditionMappingItemCollection GetMappingItemsBySubClass(RelativeAttributes attrs, MemberInfo sourceMI) { ConditionMappingItemCollection items = new ConditionMappingItemCollection(); System.Type subType = attrs.SubClassType != null ? attrs.SubClassType.Type : GetRealType(sourceMI); MemberInfo[] mis = GetTypeMembers(subType); foreach (SubConditionMappingAttribute attr in attrs.SubClassFieldMappings) { MemberInfo mi = GetMemberInfoByName(attr.SubPropertyName, mis); if (mi != null) { ConditionMappingItem item = new ConditionMappingItem(); item.PropertyName = sourceMI.Name; item.SubClassPropertyName = attr.SubPropertyName; item.MemberInfo = mi; if (attrs.SubClassType != null) { item.SubClassTypeDescription = attrs.SubClassType.TypeDescription; } FillMappingItemByAttr(item, attr); items.Add(item); } } return(items); }
private static object GetValueFromObjectDirectly(ConditionMappingItem item, object graph) { object data = GetMemberValueFromObject(item.MemberInfo, graph); if (data != null) { System.Type dataType = data.GetType(); if (dataType.IsEnum) { if (item.EnumUsage == EnumUsageTypes.UseEnumValue) { data = (int)data; } else { data = data.ToString(); } } else { if (dataType == typeof(TimeSpan)) { data = ((TimeSpan)data).TotalSeconds; } } } return(data); }
private static object AdjustValueBeforeAppendToBuilder(ConditionMappingItem item, object data) { object result = data; if (data is string) { if (item.EscapeLikeString) { result = TSqlBuilder.Instance.EscapeLikeString(data.ToString()); } if (item.Prefix.IsNotEmpty()) { result = item.Prefix + result; } if (item.Postfix.IsNotEmpty()) { result = result + item.Postfix; } } else { if (data is DateTime && (DateTime)data != DateTime.MinValue && (DateTime)data != DateTime.MaxValue) { if (item.AdjustDays != 0) { result = ((DateTime)data).AddDays(item.AdjustDays); } } } return(result); }
private static object GetValueFromObject(ConditionMappingItem item, object graph) { object data = null; if (string.IsNullOrEmpty(item.SubClassPropertyName)) { data = GetValueFromObjectDirectly(item, graph); } else { if (graph != null) { MemberInfo mi = graph.GetType().GetProperty(item.PropertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (mi == null) { mi = graph.GetType().GetField(item.PropertyName, BindingFlags.Instance | BindingFlags.Public); } if (mi != null) { object subGraph = GetMemberValueFromObject(mi, graph); if (subGraph != null) { data = GetValueFromObjectDirectly(item, subGraph); } } } } return(data); }
private static void FillMappingItemByAttr(ConditionMappingItem item, ConditionMappingAttribute fm) { item.DataFieldName = fm.DataFieldName; item.Operation = fm.Operation; item.IsExpression = fm.IsExpression; item.EnumUsage = fm.EnumUsage; item.Prefix = fm.Prefix; item.Postfix = fm.Postfix; item.AdjustDays = fm.AdjustDays; item.Template = fm.Template; item.EscapeLikeString = fm.EscapeLikeString; }
private static ConditionMappingItem FindItemBySubClassPropertyName(string subPropertyName, ConditionMappingItemCollection items) { ConditionMappingItem result = null; foreach (ConditionMappingItem item in items) { if (item.SubClassPropertyName == subPropertyName) { result = item; break; } } return(result); }
private static ConditionMappingItemBase CreateConditionMappingItemByAttr(ConditionMappingAttributeBase attr) { ConditionMappingItemBase result = null; if (attr is InConditionMappingAttribute) { result = new InConditionMappingItem(); } else { result = new ConditionMappingItem(); } return(result); }
private static ConditionMappingItemCollection GetMappingItems(RelativeAttributes attrs, MemberInfo mi) { ConditionMappingItemCollection items = new ConditionMappingItemCollection(); ConditionMappingItem item = new ConditionMappingItem(); item.PropertyName = mi.Name; item.DataFieldName = mi.Name; if (attrs.FieldMapping != null) { FillMappingItemByAttr(item, attrs.FieldMapping); } item.MemberInfo = mi; items.Add(item); return(items); }
private static bool IsTypeDefaultValue(ConditionMappingItem item, object data) { bool result = false; if (data != null) { Type type = GetMemberInfoType(item.MemberInfo); if (type == typeof(object)) { type = data.GetType(); } if (type.IsEnum) { result = false; } else { if (type == typeof(string)) { result = string.IsNullOrEmpty((string)data); } else { result = data.Equals(TypeCreator.GetTypeDefaultValue(type)); } } } else { result = true; } return(result); }
private static void FillMappingItemByAttr(ConditionMappingItem item, ConditionMappingAttribute fm) { item.DataFieldName = fm.DataFieldName; item.Operation = fm.Operation; item.IsExpression = fm.IsExpression; item.EnumUsage = fm.EnumUsage; item.Prefix = fm.Prefix; item.Postfix = fm.Postfix; item.AdjustDays = fm.AdjustDays; item.Template = fm.Template; item.EscapeLikeString = fm.EscapeLikeString; }
private static ConditionMappingItemCollection GetMappingItemsBySubClass(RelativeAttributes attrs, MemberInfo sourceMI) { ConditionMappingItemCollection items = new ConditionMappingItemCollection(); System.Type subType = attrs.SubClassType != null ? attrs.SubClassType.Type : GetRealType(sourceMI); MemberInfo[] mis = GetTypeMembers(subType); foreach (SubConditionMappingAttribute attr in attrs.SubClassFieldMappings) { MemberInfo mi = GetMemberInfoByName(attr.SubPropertyName, mis); if (mi != null) { ConditionMappingItem item = new ConditionMappingItem(); item.PropertyName = sourceMI.Name; item.SubClassPropertyName = attr.SubPropertyName; item.MemberInfo = mi; if (attrs.SubClassType != null) item.SubClassTypeDescription = attrs.SubClassType.TypeDescription; FillMappingItemByAttr(item, attr); items.Add(item); } } return items; }
private static ConditionMappingItemCollection GetMappingItems(RelativeAttributes attrs, MemberInfo mi) { ConditionMappingItemCollection items = new ConditionMappingItemCollection(); ConditionMappingItem item = new ConditionMappingItem(); item.PropertyName = mi.Name; item.DataFieldName = mi.Name; if (attrs.FieldMapping != null) FillMappingItemByAttr(item, attrs.FieldMapping); item.MemberInfo = mi; items.Add(item); return items; }
private static object GetValueFromObjectDirectly(ConditionMappingItem item, object graph) { object data = GetMemberValueFromObject(item.MemberInfo, graph); if (data != null) { System.Type dataType = data.GetType(); if (dataType.IsEnum) { if (item.EnumUsage == EnumUsageTypes.UseEnumValue) data = (int)data; else data = data.ToString(); } else { if (dataType == typeof(TimeSpan)) data = ((TimeSpan)data).TotalSeconds; } } return data; }
private static object GetValueFromObject(ConditionMappingItem item, object graph) { object data = null; if (string.IsNullOrEmpty(item.SubClassPropertyName)) data = GetValueFromObjectDirectly(item, graph); else { if (graph != null) { MemberInfo mi = graph.GetType().GetProperty(item.PropertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (mi == null) mi = graph.GetType().GetField(item.PropertyName, BindingFlags.Instance | BindingFlags.Public); if (mi != null) { object subGraph = GetMemberValueFromObject(mi, graph); if (subGraph != null) data = GetValueFromObjectDirectly(item, subGraph); } } } return data; }
private static bool IsTypeDefaultValue(ConditionMappingItem item, object data) { bool result = false; if (data != null) { Type type = GetMemberInfoType(item.MemberInfo); if (type == typeof(object)) type = data.GetType(); if (type.IsEnum) result = false; else { if (type == typeof(string)) result = string.IsNullOrEmpty((string)data); else result = data.Equals(TypeCreator.GetTypeDefaultValue(type)); } } else result = true; return result; }
private static object AdjustValueBeforeAppendToBuilder(ConditionMappingItem item, object data) { object result = data; if (data is string) { if (item.EscapeLikeString) result = TSqlBuilder.Instance.EscapeLikeString(data.ToString()); if (item.Prefix.IsNotEmpty()) result = item.Prefix + result; if (item.Postfix.IsNotEmpty()) result = result + item.Postfix; } else { if (data is DateTime && (DateTime)data != DateTime.MinValue && (DateTime)data != DateTime.MaxValue) { if (item.AdjustDays != 0) result = ((DateTime)data).AddDays(item.AdjustDays); } } return result; }