Esempio n. 1
0
        public override IEnumerable <FilterOption> GetDistinctValues(ColumnDefinition col)
        {
            switch (col.Name)
            {
            case "Rating":
            {
                return(this.Data.Select(u => u.Rating).Distinct().OrderBy(r => r).Select(r => new FilterOption(IndexModel.FormatRating(r), IndexModel.RatingToString(r), this.IsFilterChecked(col.Name, IndexModel.RatingToString(r)))));
            }

            case "Birthday":
            {
                return(this.Data.OrderByDescending(u => u.Birthday).Select(u => (u.Age / 5) * 5).Distinct().Select(a => new FilterOption(IndexModel.GetAgeGroup(a), a.ToString(), this.IsFilterChecked(col.Name, a.ToString()))));
            }

            case "City.Name":
            {
                return(this.Data.Select(u => u.City).Distinct().OrderBy(c => c.Name).Select(c => new FilterOption(c.Name, c.LocationId.ToString(), this.IsFilterChecked(col.Name, c.LocationId.ToString()))));
            }
            }

            var param            = Expression.Parameter(typeof(TennisUserModel), col.Name);
            var selectExpression = Expression.Lambda <Func <TennisUserModel, object> >(Expression.Convert(Expression.Field(param, col.Name), typeof(object)), param);

            var data = this.Rows.Cast <TennisUserModel>().Select(selectExpression).Select(o => col.Format(o)).Distinct().ToList();

            data.Sort();

            return(data.Select(o => new FilterOption(o, o, !this.IsPostBack)));
        }