Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }