public static string GetPropertyChangeValue(object obj1, string targetProperty, string EntityName)
        {
            string result = "";

            ModelReflector.Property PropInfo = null;
            string PropName           = "";
            string targetPropertyName = "";
            string propDataType       = "String";

            if (targetProperty.StartsWith("[") && targetProperty.EndsWith("]"))
            {
                var EntityInfo = ModelReflector.Entities.FirstOrDefault(p => p.Name == EntityName);
                PropName = targetProperty.TrimStart("[".ToArray()).TrimEnd("]".ToArray());
                if (PropName.Contains("."))
                {
                    var targetProperties = PropName.Split(".".ToCharArray());
                    if (targetProperties.Length > 1)
                    {
                        var AssociationInfo = EntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == targetProperties[0]);
                        if (AssociationInfo != null)
                        {
                            var targetEntityInfo = ModelReflector.Entities.FirstOrDefault(p => p.Name == AssociationInfo.Target);
                            PropInfo = targetEntityInfo.Properties.FirstOrDefault(p => p.Name == targetProperties[1]);
                            var assocInfo = targetEntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == PropInfo.Name);
                            if (assocInfo != null)
                            {
                                propDataType = "String";
                            }
                            targetPropertyName = targetProperties[0];

                            PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                            var            Property   = properties.FirstOrDefault(p => p.Name == targetPropertyName);
                            object         PropValue  = Property.GetValue(obj1, null);
                            result = GetValueForAssociationProperty(targetEntityInfo.Name, Convert.ToString(PropValue), PropInfo.Name);
                        }
                    }
                }
                else
                {
                    targetPropertyName = EntityInfo.Properties.FirstOrDefault(p => p.Name == PropName).Name;
                    PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                    var            Property   = properties.FirstOrDefault(p => p.Name == targetPropertyName);
                    object         PropValue  = Property.GetValue(obj1, null);
                    result = Convert.ToString(PropValue);
                }
            }
            else
            {
                PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                var            property   = properties.FirstOrDefault(p => p.Name == targetProperty);
                object         Value      = property.GetValue(obj1, null);
                result = Convert.ToString(Value);
            }
            return(result);
        }
        public static string GetTargetConditionValue(object obj1, string targetProperty, string EntityName)
        {
            string result = "";

            ModelReflector.Property PropInfo = null;
            string PropName           = "";
            string targetPropertyName = "";
            string propDataType       = "String";
            var    EntityInfo         = ModelReflector.Entities.FirstOrDefault(p => p.Name == EntityName);

            if (targetProperty.StartsWith("[") && targetProperty.EndsWith("]"))
            {
                //var EntityInfo = ModelReflector.Entities.FirstOrDefault(p => p.Name == EntityName);
                PropName = targetProperty.TrimStart("[".ToArray()).TrimEnd("]".ToArray());
                if (PropName.Contains("."))
                {
                    var targetProperties = PropName.Split(".".ToCharArray());
                    if (targetProperties.Length > 1)
                    {
                        var AssociationInfo = EntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == targetProperties[0]);
                        if (AssociationInfo != null)
                        {
                            var targetEntityInfo = ModelReflector.Entities.FirstOrDefault(p => p.Name == AssociationInfo.Target);
                            PropInfo = targetEntityInfo.Properties.FirstOrDefault(p => p.Name == targetProperties[1]);
                            var assocInfo = targetEntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == PropInfo.Name);
                            if (assocInfo != null)
                            {
                                propDataType = "String";
                            }
                            targetPropertyName = targetProperties[0];

                            PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                            var            Property   = properties.FirstOrDefault(p => p.Name == targetPropertyName);
                            object         PropValue  = Property.GetValue(obj1, null);
                            result = GetValueForAssociationProperty(targetEntityInfo.Name, Convert.ToString(PropValue), PropInfo.Name);
                        }
                    }
                }
                else
                {
                    targetPropertyName = EntityInfo.Properties.FirstOrDefault(p => p.Name == PropName).Name;
                    PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                    var            Property   = properties.FirstOrDefault(p => p.Name == targetPropertyName);
                    object         PropValue  = Property.GetValue(obj1, null);
                    result = Convert.ToString(PropValue);
                }
            }
            else if (targetProperty.StartsWith("[") && (targetProperty.ToLower().EndsWith("days") || targetProperty.ToLower().EndsWith("months") || targetProperty.ToLower().EndsWith("weeks") || targetProperty.ToLower().EndsWith("years")))
            {
                var propNameArr = targetProperty.Split(" ".ToArray());
                PropName = propNameArr[0].TrimStart("[".ToArray()).TrimEnd("]".ToArray());
                if (PropName.Contains("."))
                {
                    var targetProperties = PropName.Split(".".ToCharArray());
                    if (targetProperties.Length > 1)
                    {
                        var AssociationInfo = EntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == targetProperties[0]);
                        if (AssociationInfo != null)
                        {
                            var targetEntityInfo = ModelReflector.Entities.FirstOrDefault(p => p.Name == AssociationInfo.Target);
                            PropInfo = targetEntityInfo.Properties.FirstOrDefault(p => p.Name == targetProperties[1]);
                            var assocInfo = targetEntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == PropInfo.Name);
                            if (assocInfo != null)
                            {
                                propDataType = "String";
                            }
                            targetPropertyName = targetProperties[0];

                            PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                            var            Property   = properties.FirstOrDefault(p => p.Name == targetPropertyName);
                            object         PropValue  = Property.GetValue(obj1, null);
                            result = GetValueForAssociationProperty(targetEntityInfo.Name, Convert.ToString(PropValue), PropInfo.Name);
                            if (!string.IsNullOrEmpty(result))
                            {
                                DateTime dateValue = Convert.ToDateTime(result);
                                result = dateValue.ToString("MM/dd/yyyy");
                            }
                        }
                    }
                }
                else
                {
                    targetPropertyName = EntityInfo.Properties.FirstOrDefault(p => p.Name == PropName).Name;
                    PropertyInfo[] properties = (obj1.GetType()).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                    var            Property   = properties.FirstOrDefault(p => p.Name == targetPropertyName);
                    object         PropValue  = Property.GetValue(obj1, null);
                    DateTime       dateValue  = Convert.ToDateTime(PropValue);
                    result = dateValue.ToString("MM/dd/yyyy");
                }
                var propTarget = targetProperty.Replace("[", "").Replace("]", "").Trim();
                result = EvaluateDateTime(result, propTarget.Replace(PropName, result));
            }
            return(result);
        }