private List <Tuple <string, string> > GetCriteria(LookupQuery query) { var whereCriteria = new List <Tuple <string, string> >(); if (query.ParentKeyValue.ToInt() != 0) { var rosterConfigService = new RosterConfigService(); var field = rosterConfigService.GetField(query.MetadataId.ToGuid()); if (field == null) { throw new Exception(string.Format("Field '{0}' not found", query.MetadataId)); } var dbfield = field.GetDbField() as DbFieldLookup; if (dbfield != null) { var list = rosterConfigService.GetList(field.ListMetadataId); if (list == null) { throw new Exception(string.Format("List '{0}' not found", field.ListMetadataId)); } var parentField = list.ListMetadataFields.FirstOrDefault(item => item.InternalName == dbfield.DependentParent); if (parentField != null) { if (dbfield.DependentParentField == parentField.DataSourceKey) { whereCriteria.Add(new Tuple <string, string>(dbfield.FilterByField, query.ParentKeyValue.ToSafeString())); } else { var parentResults = BLExtensions.SourceContent(parentField.DataSource, parentField.DataSourceKey.ToSafeString(), parentField.DataSourceField, parentField.DataSourceType, new List <Tuple <string, string> > { new Tuple <string, string>(parentField.DataSourceKey.ToSafeString(), query.ParentKeyValue.ToSafeString()) }); if (!parentResults.IsEmpty()) { var firstOrDefault = parentResults.FirstOrDefault(); if (firstOrDefault != null) { var parentResult = (firstOrDefault.Item2 as IDictionary <string, object>); if (parentResult.ContainsKey(dbfield.DependentParentField)) { whereCriteria.Add(new Tuple <string, string>(dbfield.FilterByField, parentResult[dbfield.DependentParentField].ToSafeString())); } } } } } } } return(whereCriteria); }
public LookupResult Lookup(LookupQuery query) { DisableCaching(); var result = new LookupResult { Page = query.Page, Items = new List <LookupResultItem>() }; try { result.Page = query.Page; var queryTerm = query.Query.ToSafeString().ToLowerInvariant(); var content = BLExtensions.SourceContent(query.Source, query.Key.ToSafeString(), query.Fields, query.ListType, GetCriteria(query)) .OrderBy(e => e.Item2.FirstValue()) .Where(i => i.Item2.ToSeparatedString().ToLowerInvariant().Contains(queryTerm)); content.Take(PageSize).Skip(PageSize * result.Page).ToList().ForEach(item => { var resultItem = new LookupResultItem { id = item.Item1, name = item.Item2.FirstValue(), description = string.Empty, property = new List <LookupResultItemProperty>(), }; foreach (var itemList in item.Item2) { resultItem.property.Add(new LookupResultItemProperty { Name = string.Format("{0}_{1}", query.Source, itemList.Key), Value = itemList.Value.ToSafeString() }); } ((List <LookupResultItem>)result.Items).Add(resultItem); }); } catch (SqlException ex) { if (!ex.Message.Contains("Conversion failed")) { HandleException(ex); } } catch (Exception ex) { HandleException(ex); } return(result); }