/// <summary> /// Validates the includes. /// </summary> /// <param name="item">The item.</param> /// <param name="includes">The includes.</param> /// <param name="typeWildcard">The type wildcard.</param> /// <param name="parentTable">The parent table.</param> /// <author>Mauricio Suárez Robelto</author> public static void ValidateIncludes(object item, List <string> includes, string typeWildcard, string parentTable) { if (item != null) { PropertyInfo[] properties = item.GetType().GetProperties(); foreach (PropertyInfo property in properties) { if (property.GetValue(item, null) != null) { if (ConditionalQuery.IsGenericType(property.PropertyType)) { if (property.PropertyType.ToString() == typeWildcard) { bool?valueProperty = (bool?)property.GetValue(item, null); if (valueProperty.Value) { includes.Add(parentTable + "." + property.Name); } } } else { if (property.PropertyType.IsGenericType) { IList listNewObject = (IList)property.GetValue(item, null); if (listNewObject.Count > 0) { ConditionalQuery.ValidateIncludes(listNewObject[0], includes, typeWildcard, listNewObject[0].GetType().Name); } } else { ConditionalQuery.ValidateIncludes(property.GetValue(item, null), includes, typeWildcard, property.GetValue(item, null).GetType().Name); } } } } } }
/// <summary> /// Generates the includes. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="listDtoObject">The list dto object.</param> /// <returns></returns> /// <author>Mauricio Suárez Robelto</author> public static string[] GenerateIncludes <T>(List <T> listDtoObject) where T : BaseDto { string referenceWildcard = "ReferenceTable"; int lenghtReferenceWildcard = referenceWildcard.Length; string typeWildcard = "System.Nullable`1[System.Boolean]"; List <string> includes = new List <string>(); if (listDtoObject.Count() > 0) { PropertyInfo[] properties = listDtoObject[0].GetType().GetProperties(); object item = listDtoObject[0]; ConditionalQuery.ValidateIncludes(item, includes, typeWildcard, ""); } for (int i = 0; i < includes.Count; i++) { if (includes[i].Length > lenghtReferenceWildcard) { if (referenceWildcard == includes[i].Substring(includes[i].IndexOf('.') + 1, lenghtReferenceWildcard)) { includes[i] = includes[i].Replace(referenceWildcard, "").Replace("Dto", ""); includes[i] = (includes[i].StartsWith(".") ? includes[i].Replace(".", "") : includes[i]); } else { includes[i] = null; } } else { includes[i] = null; } } includes.RemoveAll(remove => remove == null); //return ConditionalQuery.ConcatIncludes(includes).ToArray(); return(ConditionalQuery.GenerateNewInclude(includes).ToArray()); }