private bool RecordMatch(FundraisingMenuResult r, DataTableParameters query)
{
IEnumerable<ColumnData> validColumns = query.columns.Where(c => !String.IsNullOrEmpty(c.data));
// Check for a column search value match.
IEnumerable<ColumnData> columnsWithQueries = validColumns
.Where(c => !String.IsNullOrEmpty(c.search.value));
bool filterMatch = columnsWithQueries.Count() == 0 ||
columnsWithQueries.Select(delegate(ColumnData c)
{
bool match = false;
SearchParameters searchParams = JsonConvert.DeserializeObject<SearchParameters>(c.search.value);
if (searchParams.payload.Count > 0)
{
if (_dataMap.ContainsKey(c.data))
{
foreach (string searchValue in searchParams.payload)
{
match = match || _dataMap[c.data].TextSearchMatch(searchValue, r);
}
}
}
return match;
}).Aggregate(false, (a, b) => a || b);
// Check for a text search value match in all columns
bool textSearchMatch = String.IsNullOrEmpty(query.search.value) ||
validColumns.Select(delegate(ColumnData c)
{
return _dataMap.ContainsKey(c.data) &&
_dataMap[c.data].TextSearchMatch(query.search.value, r);
}).Aggregate(false, (a, b) => a || b);
return filterMatch && textSearchMatch;
}