FundraisingMenu.SearchServices.FundraisingMenuSearchServices.RecordMatch C# (CSharp) Method

RecordMatch() private method

private RecordMatch ( FundraisingMenuResult r, DataTableParameters query ) : bool
r FundraisingMenu.Models.FundraisingMenuResult
query FundraisingMenu.Integration.DataTableParameters
return bool
        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;
        }