public List<Resource> FindResources(ResourceType resourceType, string searchString, string stateFilter) { var templateId = resourceType != null ? resourceType.Id : 0; var searchValue = searchString.ToLower(); using (var w = WorkspaceFactory.CreateReadOnly()) { var result = w.Query<Resource>( x => x.ResourceTypeId == templateId && (x.CustomData.Contains(searchString) || x.Name.ToLower().Contains(searchValue))).Take(250).ToList(); if (resourceType != null) result = result.Where(x => resourceType.GetMatchingFields(x, searchString).Any(y => !y.Hidden) || x.Name.ToLower().Contains(searchValue)).ToList(); if (!string.IsNullOrEmpty(stateFilter)) { var sv = string.Format("\"S\":\"{0}\"", stateFilter); var set = result.Select(x => x.Id).ToList(); var ids = w.Queryable<ResourceStateValue>().Where(x => set.Contains(x.ResoruceId) && x.ResourceStates.Contains(sv)).GroupBy(x => x.ResoruceId).Select(x => x.Max(y => y.Id)); var resourceIds = w.Queryable<ResourceStateValue>().Where(x => ids.Contains(x.Id)).Select(x => x.ResoruceId).ToList(); result = result.Where(x => resourceIds.Contains(x.Id)).ToList(); } return result; } }
public List<Resource> SearchResources(string searchString, ResourceType selectedResourceType, int stateFilter) { var templateId = selectedResourceType != null ? selectedResourceType.Id : 0; var searchValue = searchString.ToLower(); using (var w = WorkspaceFactory.CreateReadOnly()) { var result = w.Query<Resource>( x => x.ResourceTypeId == templateId && (x.CustomData.Contains(searchString) || x.Name.ToLower().Contains(searchValue))).Take(250).ToList(); if (selectedResourceType != null) result = result.Where(x => selectedResourceType.GetMatchingFields(x, searchString).Any(y => !y.Hidden) || x.Name.ToLower().Contains(searchValue)).ToList(); if (stateFilter > 0) { var set = result.Select(x => x.Id).ToList(); var ids = w.Queryable<ResourceStateValue>().Where(x => set.Contains(x.ResoruceId) && x.StateId == stateFilter).GroupBy(x => x.ResoruceId).Select(x => x.Max(y => y.Id)); var resourceIds = w.Queryable<ResourceStateValue>().Where(x => ids.Contains(x.Id)).Select(x => x.ResoruceId).ToList(); result = result.Where(x => resourceIds.Contains(x.Id)).ToList(); } return result; } }