protected List <MappedProperty> CopyProperties(List <MappedProperty> properties) { List <MappedProperty> list = new List <MappedProperty>(); foreach (MappedProperty prop in properties) { MappedProperty copy = prop.Copy(); if (prop.IsComplexProperty) { copy.ChildProperties = CopyProperties(prop.ChildProperties); } list.Add(copy); } return(list); }
public List <MappedProperty> OrderFlatBySelectedProperties(List <MappedProperty> properties, List <string> includeProperties) { if (includeProperties.Count == 0) { return(properties); } List <MappedProperty> result = new List <MappedProperty>(); foreach (string includedPropName in includeProperties) { MappedProperty mappedProperty = properties.First(x => x.EfDefaultName == includedPropName); result.Add(mappedProperty); } return(result); }
//Filtering and ordering public List <MappedProperty> FilterProperties(List <MappedProperty> properties, bool hasOtherConditions , List <string> includeProperties, List <string> excludeProperties , bool excludeAllByDefault, ExcludeOptions includeDbGeneratedProperties) { List <MappedProperty> selectedProperties; if (includeProperties.Count > 0 || hasOtherConditions) { selectedProperties = properties.Where( pr => pr.IsComplexProperty || includeProperties.Contains(pr.EfDefaultName)) .ToList(); } else if (excludeProperties.Count > 0) { selectedProperties = properties.Where( pr => pr.IsComplexProperty || !excludeProperties.Contains(pr.EfDefaultName)) .ToList(); } else if (excludeAllByDefault) { selectedProperties = new List <MappedProperty>(); if (includeDbGeneratedProperties == ExcludeOptions.Include) { List <string> generatedProps = _context.GetDatabaseGeneratedProperties(_entityType); selectedProperties = properties .Where(x => generatedProps.Contains(x.EfMappedName)) .ToList(); } } else //include all by default { selectedProperties = properties; if (includeDbGeneratedProperties == ExcludeOptions.Exclude) { List <string> generatedProps = _context.GetDatabaseGeneratedProperties(_entityType); selectedProperties = selectedProperties .Where(x => !generatedProps.Contains(x.EfMappedName)) .ToList(); } } //exclude properties that are not part mapped to any column selectedProperties = selectedProperties.Where( pr => pr.IsComplexProperty || pr.EfMappedName != null) .ToList(); for (int i = 0; i < selectedProperties.Count; i++) { if (selectedProperties[i].IsComplexProperty) { MappedProperty copy = selectedProperties[i].Copy(); copy.ChildProperties = FilterProperties(selectedProperties[i].ChildProperties, hasOtherConditions , includeProperties, excludeProperties, excludeAllByDefault, includeDbGeneratedProperties); selectedProperties[i] = copy; } } return(selectedProperties); }