using System.Collections.Generic;
public List<Activity> Activities{get;set;}=new List<Activity>();
public Filters Filters {get;set;}=new Filters();
public string PostCode {get;set;}
public string CareOutcome {get;set;}
public List<string> PostCodes {get;set;} = new List<string>();
public List<string> CareOutcomes {get;set;}=new List<string>();
static List<Activity> activities=new List<Activity>{
CareOutcome="Care Outcome 1"
CareOutcome="Care Outcome 2"
CareOutcome="Care Outcome 1"
CareOutcome="Care Outcome 2"
CareOutcome="Care Outcome 3"
public static void Main(string[] args)
var response= GetResponse(new Filters(){
PostCodes= new List<string>{"G62"},
CareOutcomes=new List<string>{"Care Outcome 1"}
Console.WriteLine("-----------------Activities--------------------");
foreach(var activity in response.Activities){
Console.WriteLine ($"{activity.Id} | {activity.PostCode} | {activity.CareOutcome}");
Console.WriteLine("-----------------Care Outcome Filters-----------");
foreach(var careOutcomeFilter in response.Filters.CareOutcomes)
Console.WriteLine(careOutcomeFilter);
Console.WriteLine("-----------------PostCode Filters---------------");
foreach(var postCodeFilter in response.Filters.PostCodes)
Console.WriteLine(postCodeFilter);
public static Response GetResponse(Filters filterRequest){
var response= new Response();
response.Activities= activities.Where(x=>(!filterRequest.CareOutcomes.Any() || filterRequest.CareOutcomes.Contains(x.CareOutcome)) && (!filterRequest.PostCodes.Any() ||filterRequest.PostCodes.Contains(x.PostCode))).ToList();
response.Filters.PostCodes=response.Activities.Select(x=>x.PostCode).Distinct().ToList();
response.Filters.CareOutcomes=response.Activities.Select(x=>x.CareOutcome).Distinct().ToList();