private async Task SetChain(Bug.Logic.DomainModel.SearchParameter SearchParameter, KeyValuePair <string, StringValues> SingleChainedParameter, bool IsChainedReferance) { IList <ISearchQueryBase> SearchQueryBaseList = await ISearchQueryFactory.Create(this.ResourceContext, SearchParameter, SingleChainedParameter, IsChainedReferance); foreach (ISearchQueryBase SearchQueryBase in SearchQueryBaseList) { if (SearchQueryBase.IsValid) { if (SearchQueryBase.CloneDeep() is ISearchQueryBase SearchQueryBaseClone) { if (ParentChainSearchParameter is null) { ParentChainSearchParameter = SearchQueryBaseClone; } else { if (ParentChainSearchParameter.ChainedSearchParameter is null) { ParentChainSearchParameter.ChainedSearchParameter = SearchQueryBaseClone; } if (PreviousChainSearchParameter is object) { PreviousChainSearchParameter.ChainedSearchParameter = SearchQueryBaseClone; } else { throw new NullReferenceException(nameof(PreviousChainSearchParameter)); } } PreviousChainSearchParameter = SearchQueryBaseClone; if (IsChainedReferance) { PreviousChainSearchParameter.Modifier = SearchModifierCode.Type; } } else { throw new InvalidCastException($"Internal Server Error: Unable to cast cloned SearchQueryBase to ISearchQueryBase"); } } else { string Message = $"Failed to parse the value of the chain search query. Additional information: {SearchQueryBase.InvalidMessage}"; ErrorInSearchParameterProcessing = true; InvalidSearchQueryParameterList.Add(new InvalidSearchQueryParameter(this.RawParameter, Message)); break; } } }
public IList <Founder> Search(SearchQueryBase <Founder> searchQuery) { FounderSerachQuery query = searchQuery as FounderSerachQuery; IQueryable <Founder> result; if (query.Tin != null) { result = context .GetDbSet <Founder>() .Where(f => f.Tin == query.Tin.Value); } else { if (query.RelatedCompanyId != null) { result = context .GetDbSet <FounderToCompany>() .Where(r => r.Company.Id == query.RelatedCompanyId.Value && !r.IsDeleted) .Select(r => r.Founder) .Where(f => !f.IsDeleted); } else { result = context.Founders.Where(f => !f.IsDeleted); } if (!string.IsNullOrEmpty(query.LastName)) { result = result.Where(f => f.LastName.Contains(query.LastName)); } if (!string.IsNullOrEmpty(query.FirstName)) { result = result.Where(f => f.FirstName.Contains(query.FirstName)); } if (!string.IsNullOrEmpty(query.MiddleName)) { result = result.Where(f => f.MiddleName.Contains(query.MiddleName)); } } return(result .Page(searchQuery.PageNumber, searchQuery.PageSize) .ToArray()); }
public IList <Company> Search(SearchQueryBase <Company> searchQuery) { CompanySearchQuery query = searchQuery as CompanySearchQuery; IQueryable <Company> result; if (query.Tin != null) { result = context .GetDbSet <Company>() .Where(c => c.Tin == query.Tin.Value && !c.IsDeleted); } else { if (query.FounderId != null) { result = context .GetDbSet <FounderToCompany>() .Where(r => r.Founder.Id == query.FounderId && !r.IsDeleted) .Select(r => r.Company) .Where(c => !c.IsDeleted); } else { result = context .GetDbSet <Company>() .Where(c => !c.IsDeleted); } if (!string.IsNullOrEmpty(query.Title)) { result = result.Where(c => c.Title.Contains(query.Title)); } if (query.CompanyType != null) { result = result.Where(c => c.Type == query.CompanyType.Value); } } return(result .Page(searchQuery.PageNumber, searchQuery.PageSize) .ToArray()); }