//public static IEnumerable<IFilterData<T>> AddData<T, TProperty>(this IFilterData<T> src, Expression<Func<T, TProperty>> path, string displayName)
        //{
        //    var data = FilterDataFactory<T>.CreateFilterData(path);
        //    data.DisplayName = displayName;
        //    data.IsDisplayed = true;
        //    yield return src;
        //    yield return new FilterData<T>(data);
        //}
        //public static IEnumerable<IFilterData<T>> AddData<T, TProperty, TCollection, TValue>(this IFilterData<T> src, Expression<Func<T, TProperty>> path, IEnumerable<TCollection> validValues, Func<TCollection, string> displayFunc, Func<TCollection, TValue> valueFunc)
        //{
        //    var data = FilterDataFactory<T>.CreateFilterData(path);
        //    data.IsDisplayed = true;
        //    data.ValidValues = (nameof(ComboContainer.DisplayMember), nameof(ComboContainer.ValueMember), validValues.Select(v => new ComboContainer { DisplayMember = displayFunc(v), ValueMember = valueFunc(v) }));
        //    yield return src;
        //    yield return new FilterData<T>(data);
        //}



        public static IEnumerable <IFilterData <T> > AddData <T, TProperty>(this IEnumerable <IFilterData <T> > src, Expression <Func <T, TProperty> > path, string displayName)
        {
            var data = FilterDataFactory <T> .CreateFilterData(path);

            data.DisplayName = displayName;
            data.IsDisplayed = true;
            foreach (var item in src)
            {
                yield return(item);
            }
            yield return(new FilterData <T>(data));
        }
        public static IEnumerable <IFilterData <T> > AddData <T, TProperty, TCollection, TValue>(this IEnumerable <IFilterData <T> > src, Expression <Func <T, TProperty> > path, Expression <Func <TProperty, TValue> > valuePropFunc, Func <IEnumerable <TCollection> > validValues, Func <TCollection, string> displayFunc, Func <TCollection, TValue> valueFunc)
        {
            var data = FilterDataFactory <T> .CreateFilterData(path);

            var propValue = FilterDataFactory <T> .CreateFilterData(valuePropFunc);

            data.IsDisplayed = true;
            data.ValidValues = ("", propValue.PropertyName, () => validValues().Select(v => new ComboContainer {
                DisplayMember = displayFunc(v), ValueMember = valueFunc(v)
            }));
            foreach (var item in src)
            {
                yield return(item);
            }
            yield return(new FilterData <T>(data));
        }