public PagedQueryResult <EstablishmentView> Handle(EstablishmentViewsByKeyword query) { if (query == null) { throw new ArgumentNullException("query"); } var possibleNullView = _projector.GetView(); if (possibleNullView == null) { System.Threading.Thread.Sleep(1000); return(Handle(query)); } var view = possibleNullView.AsQueryable(); const StringComparison ordinalIgnoreCase = StringComparison.OrdinalIgnoreCase; // when the query's country code is empty string, match all establishments regardless of country. // when the query's country code is null, match establishments without country if (query.CountryCode == null) { view = view.Where(x => string.IsNullOrWhiteSpace(x.CountryCode)); } // when the country code is specified, match establishments with country else if (!string.IsNullOrWhiteSpace(query.CountryCode)) { view = view.Where(x => x.CountryCode.Equals(query.CountryCode, ordinalIgnoreCase)); } // search names & URL's for keyword if (!string.IsNullOrWhiteSpace(query.Keyword)) { view = view.Where(x => x.Names.Any(y => y.Text.Contains(query.Keyword, ordinalIgnoreCase) || y.AsciiEquivalent.Contains(query.Keyword, ordinalIgnoreCase) ) //|| x.WebsiteUrl.Contains(query.Keyword, ordinalIgnoreCase) TODO: fix usil.edu.pe & possibly others || x.Urls.Any(y => y.Value.Contains(query.Keyword, ordinalIgnoreCase)) || x.CeebCode.Contains(query.Keyword, ordinalIgnoreCase) || x.UCosmicCode.Contains(query.Keyword, ordinalIgnoreCase) ); } if (query.TypeEnglishNames != null && query.TypeEnglishNames.Any()) { view = view.Where(x => query.TypeEnglishNames.Contains(x.Type.EnglishName)); } if (query.Id.HasValue) { view = view.Where(x => x.Id == query.Id.Value); } view = view.OrderBy(query.OrderBy); var pagedResults = new PagedQueryResult <EstablishmentView>(view, query.PageSize, query.PageNumber); return(pagedResults); }
public EstablishmentView Handle(EstablishmentViewById query) { if (query == null) { throw new ArgumentNullException("query"); } var view = _projector.GetView().AsQueryable(); return(view.SingleOrDefault(x => x.Id == query.Id)); }