コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }