using System;
using System.Collections.Generic;
using System.Linq;
public class QuickSearchResult
{
public string ID { get; set; }
public string Title { get; set; }
}
public class CollectionHydrationSettings
{
public List<QuickSearchResult> Providers { get; set; }
public List<QuickSearchResult> Genres { get; set; }
public List<QuickSearchResult> AdiCategories { get; set; }
public string Sort { get; set; }
public HydrationExclusions Exclusions { get; set; }
public List<FilterGroup> FilterGroups { get; set; }
public CollectionHydrationSettings()
{
Providers = new List<QuickSearchResult>();
Genres = new List<QuickSearchResult>();
AdiCategories = new List<QuickSearchResult>();
Exclusions = new HydrationExclusions();
FilterGroups = new List<FilterGroup>();
Sort = "Title ASC";
}
public class HydrationExclusions
{
public List<string> TmsIds { get; set; }
public List<string> MovieAssetIds { get; set; }
public List<string> PackageAssetIds { get; set; }
public List<QuickSearchResult> Providers { get; set; }
public List<QuickSearchResult> Genres { get; set; }
public List<QuickSearchResult> AdiCategories { get; set; }
public HydrationExclusions()
{
TmsIds = new List<string>();
MovieAssetIds = new List<string>();
PackageAssetIds = new List<string>();
Providers = new List<QuickSearchResult>();
Genres = new List<QuickSearchResult>();
AdiCategories = new List<QuickSearchResult>();
}
}
public class FilterGroup
{
public List<string> ProgramTypes { get; set; }
public List<string> Ratings { get; set; }
public List<string> Years { get; set; }
public List<List<QuickSearchResult>> GenreGroups { get; set; }
public FilterGroup()
{
ProgramTypes = new List<string>();
Ratings = new List<string>();
Years = new List<string>();
GenreGroups = new List<List<QuickSearchResult>>();
}
}
}
public class Test
{
public static void Main()
{
CollectionHydrationSettings HydrationSettings = new CollectionHydrationSettings();
string Filter = String.Format("({0})",
String.Join(") or (", HydrationSettings.FilterGroups
.Where(FilterGroup => FilterGroup.ProgramTypes.Count > 0 ||
FilterGroup.Ratings.Count > 0 ||
FilterGroup.Years.Count > 0 ||
(FilterGroup.GenreGroups.Count > 0 && FilterGroup.GenreGroups
.Any(GenreGroup => GenreGroup.Count > 0)))
.Select(FilterGroup =>
{
List<string> Filters = new List<string>();
if (FilterGroup.ProgramTypes.Count > 0)
Filters.Add(String.Format("ProgramType in (\"{0}\")",
String.Join("\",\"", FilterGroup.ProgramTypes)));
if (FilterGroup.Ratings.Count > 0)
Filters.Add(String.Format("Rating in (\"{0}\")",
String.Join("\",\"", FilterGroup.Ratings)));
if (FilterGroup.Years.Count > 0)
Filters.Add(String.Format("Year in ({0})",
String.Join(",", FilterGroup.Years)));
if (FilterGroup.GenreGroups.Count > 0)
Filters.Add(String.Join(" or ", FilterGroup.GenreGroups
.Where(GenreGroup => GenreGroup.Count > 0)
.Select(GenreGroup => String.Format("({0})",
String.Join(" and ", GenreGroup
.Select(Genre => String.Format("AdiGenreMappings.Any(GenreID = {0})", Genre.ID)))))));
return String.Format("({0})",
String.Join(") and (", Filters));
})));
Console.WriteLine(Filter);
}
}