private static List <Mark> FilterByMarkName(SearchPartsQuery partsQuery, List <Mark> filteredMarks)
        {
            var tempMarks = new List <Mark>();

            for (int i = 0; i < filteredMarks.Count; i++)
            {
                if (filteredMarks[i].Name.Equals(partsQuery.MarkName, StringComparison.OrdinalIgnoreCase))
                {
                    tempMarks.Add(filteredMarks[i]);
                }
            }

            return(tempMarks);
        }
        private static List <Model> FilterByTransmissionType(SearchPartsQuery partsQuery, List <Model> filteredModels)
        {
            var tempModels = new List <Model>();

            for (int i = 0; i < filteredModels.Count; i++)
            {
                if (filteredModels[i].TransmissionType == partsQuery.TransmissionType.Value)
                {
                    tempModels.Add(filteredModels[i]);
                }
            }

            return(tempModels);
        }
        private static List <Model> FilterByYear(SearchPartsQuery partsQuery, List <Model> filteredModels)
        {
            var tempModels = new List <Model>();

            for (int i = 0; i < filteredModels.Count; i++)
            {
                if (filteredModels[i].Year == partsQuery.Year.Value)
                {
                    tempModels.Add(filteredModels[i]);
                }
            }

            return(tempModels);
        }
        private List <Part> FilterByPartName(SearchPartsQuery partsQuery, List <Part> parts)
        {
            var tempParts = new List <Part>();

            for (int i = 0; i < parts.Count; i++)
            {
                if (parts[i].Name.Equals(partsQuery.PartName, StringComparison.OrdinalIgnoreCase))
                {
                    tempParts.Add(parts[i]);
                }
            }

            return(tempParts);
        }
        /// <summary>
        /// Поиск запчастей по множеству фильтров. Все фильтры работают через "и"
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public SearchPartsResult[] SearchParts(SearchPartsQuery query)
        {
            if (query == null)
            {
                throw new System.ArgumentNullException(nameof(query));
            }

            var filteredMarks  = new List <Mark>(context.Marks);
            var filteredModels = new List <Model>(context.Models);
            var filteredParts  = new List <Part>(context.Parts);

            if (query.MarkName != null)
            {
                filteredMarks = FilterByMarkName(query, filteredMarks);
            }

            filteredModels = FilterByMarks(filteredModels, filteredMarks);

            if (query.ModelName != null)
            {
                filteredModels = FilterByModelName(query, filteredModels);
            }

            if (query.Year != null)
            {
                filteredModels = FilterByYear(query, filteredModels);
            }

            if (query.TransmissionType != null)
            {
                filteredModels = FilterByTransmissionType(query, filteredModels);
            }

            filteredParts = FilterByModels(filteredParts, filteredModels);

            if (query.PartCode != null)
            {
                filteredParts = FilterByPartCode(query, filteredParts);
            }

            if (query.PartName != null)
            {
                filteredParts = FilterByPartName(query, filteredParts);
            }

            var result = new List <SearchPartsResult>();

            for (int i = 0; i < filteredParts.Count; i++)
            {
                var model = GetModel(filteredParts[i].ModelId);
                var mark  = GetMark(model.MarkId);

                var item = new SearchPartsResult
                {
                    PartCode         = filteredParts[i].Code,
                    CrossCodes       = filteredParts[i].CrossCodes.ToArray(),
                    PartName         = filteredParts[i].Name,
                    PartId           = filteredParts[i].Id,
                    MarkName         = mark.Name,
                    ModelName        = model.Name,
                    TransmissionType = model.TransmissionType,
                    Year             = model.Year
                };

                result.Add(item);
            }

            return(result.ToArray());
        }