Added Method to convert classField-names to according dbAttributes
Added convert in GetListByAttribute
This commit is contained in:
		
							parent
							
								
									0ad7221680
								
							
						
					
					
						commit
						b014c2f392
					
				@ -94,18 +94,17 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <typeparam name="T"></typeparam>
 | 
					        /// <typeparam name="T"></typeparam>
 | 
				
			||||||
        /// <param name="classType">Type of class</param>
 | 
					        /// <param name="classType">Type of class</param>
 | 
				
			||||||
        /// <param name="attributes">attributes for select</param>
 | 
					        /// <param name="fields">class-fields for select</param>
 | 
				
			||||||
        /// <param name="queryExecutor">Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue]</param>
 | 
					        /// <param name="queryExecutor">Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue]</param>
 | 
				
			||||||
        /// <param name="runDataLossChecks">This checks if any class-field and data-attribute does not exists in either (Slower)</param>
 | 
					        /// <param name="runDataLossChecks">This checks if any class-field and data-attribute does not exists in either (Slower)</param>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public static List<T> GetListByAttribute<T>(Type classType, Dictionary<string, object> attributes, Func<string, List<Dictionary<string, object>>> queryExecutor, bool runDataLossChecks = true) where T : new()
 | 
					        public static List<T> GetListByAttribute<T>(Type classType, Dictionary<string, object> fields, Func<string, List<Dictionary<string, object>>> queryExecutor, bool runDataLossChecks = true) where T : new()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            string tableName = Function.GetDbTableName(classType);  // Get database-tableName
 | 
					            string tableName = Function.GetDbTableName(classType);  // Get database-tableName
 | 
				
			||||||
            return GetListByAttribute<T>(tableName, attributes, queryExecutor, runDataLossChecks);
 | 
					
 | 
				
			||||||
        }
 | 
					            Function.ConvertAttributeToDbAttributes(classType, fields);
 | 
				
			||||||
        public static List<T> GetListByAttribute<T>(string tableName, Dictionary<string, object> attributes, Func<string, List<Dictionary<string, object>>> queryExecutor, bool runDataLossChecks = true) where T: new()
 | 
					
 | 
				
			||||||
        {
 | 
					            string query = QueryBuilder.SelectByAttribute(tableName, fields);   // Generate query
 | 
				
			||||||
            string query = QueryBuilder.SelectByAttribute(tableName, attributes);   // Generate query
 | 
					 | 
				
			||||||
            List<Dictionary<string, object>> dataSet = queryExecutor(query);    // Execute
 | 
					            List<Dictionary<string, object>> dataSet = queryExecutor(query);    // Execute
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<T> objs = new List<T>() { };
 | 
					            List<T> objs = new List<T>() { };
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,52 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal static void ConvertAttributeToDbAttributes(Type classType, Dictionary<string, object> attributeNameAndValues)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Dictionary<string, FieldInfo> classFields = ReadDbClassFields(classType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (KeyValuePair<string, object> attributeNameAndValue in attributeNameAndValues)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                bool nameFound = false;
 | 
				
			||||||
 | 
					                foreach (KeyValuePair<string, FieldInfo> classField in classFields)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (attributeNameAndValue.Key.ToLower() == classField.Value.Name.ToLower())
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        attributeNameAndValues.Remove(attributeNameAndValue.Key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        attributeNameAndValues.Add(classField.Key, attributeNameAndValue.Value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        nameFound = true;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!nameFound) throw new InvalidOperationException($"{attributeNameAndValue.Key} has no classField!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        internal static void ConvertAttributeToDbAttributes(Type classType, List<string> attributeNames)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Dictionary<string, FieldInfo> classFields = ReadDbClassFields(classType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            List<string> dbAttributes = new List<string>() { };
 | 
				
			||||||
 | 
					            for(int i=0; i< attributeNames.Count; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                bool nameFound = false;
 | 
				
			||||||
 | 
					                foreach (KeyValuePair<string, FieldInfo> classField in classFields)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if(attributeNames[i].ToLower() == classField.Value.Name.ToLower())
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        attributeNames[i] = classField.Key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        nameFound = true;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!nameFound) throw new InvalidOperationException($"{attributeNames[i]} has no classField!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static void ReadDbClassFields<T>(T classObject, ref Dictionary<string, object> dbPrimaryKeys, ref Dictionary<string, object> dbAttributes, ref Dictionary<string, object> dbForeignKeys)
 | 
					        internal static void ReadDbClassFields<T>(T classObject, ref Dictionary<string, object> dbPrimaryKeys, ref Dictionary<string, object> dbAttributes, ref Dictionary<string, object> dbForeignKeys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Type classType = typeof(T);
 | 
					            Type classType = typeof(T);
 | 
				
			||||||
@ -65,10 +111,8 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static Dictionary<string, FieldInfo> ReadDbClassFields<T>(T classObject)
 | 
					        internal static Dictionary<string, FieldInfo> ReadDbClassFields(Type classType)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Type classType = typeof(T);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Dictionary<string, FieldInfo> dbFields = new Dictionary<string, FieldInfo>();
 | 
					            Dictionary<string, FieldInfo> dbFields = new Dictionary<string, FieldInfo>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Iterate thru all properties
 | 
					            // Iterate thru all properties
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user