Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 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;
 }
Пример #6
0
        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);
        }
Пример #7
0
        private static ConditionMappingItemBase CreateConditionMappingItemByAttr(ConditionMappingAttributeBase attr)
        {
            ConditionMappingItemBase result = null;

            if (attr is InConditionMappingAttribute)
            {
                result = new InConditionMappingItem();
            }
            else
            {
                result = new ConditionMappingItem();
            }

            return(result);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
		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;
		}
Пример #11
0
		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;
		}
Пример #12
0
		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;
		}
Пример #13
0
		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;
		}
Пример #14
0
		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;
		}
Пример #15
0
		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;
		}
Пример #16
0
		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;
		}