private static IEnumerable <ExpandedOrchestrationStatus> ApplyFilter(this IEnumerable <ExpandedOrchestrationStatus> orchestrations, FilterClause filter) { if (string.IsNullOrEmpty(filter.FieldName)) { foreach (var orchestration in orchestrations) { yield return(orchestration); } } else { if (filter.Predicate == null) { // if filter expression is invalid, returning nothing yield break; } var propInfo = typeof(ExpandedOrchestrationStatus) .GetProperties() .FirstOrDefault(p => p.Name.Equals(filter.FieldName, StringComparison.InvariantCultureIgnoreCase)); if (propInfo == null) { // if field name is invalid, returning nothing yield break; } foreach (var orchestration in orchestrations) { if (filter.Predicate(orchestration.GetPropertyValueAsString(propInfo))) { yield return(orchestration); } } } }
// Applies a filter to a collection of items internal static IEnumerable <T> ApplyFilter <T>(this IEnumerable <T> items, FilterClause filter) { if (string.IsNullOrEmpty(filter.FieldName)) { // if field to be filtered is not specified, returning everything foreach (var orchestration in items) { yield return(orchestration); } } else { if (filter.Predicate == null) { // if filter expression is invalid, returning nothing yield break; } var propInfo = typeof(T).GetProperties() .FirstOrDefault(p => p.Name.Equals(filter.FieldName, StringComparison.InvariantCultureIgnoreCase)); if (propInfo == null) { // if field name is invalid, returning nothing yield break; } foreach (var item in items) { if (filter.Predicate(item.GetPropertyValueAsString(propInfo))) { yield return(item); } } } }