/// <summary>
        ///     Gets metadata list given an array of metadata ids
        /// </summary>
        /// <param name="metadataIds">The array of metadata ids</param>
        /// <returns>IObservable&lt;IList&lt;Metadata&gt;&gt;</returns>
        public IObservable <IList <Metadata> > GetMetadata(List <string> metadataIds)
        {
            Guard.NotLessThanOrEqualTo(metadataIds.Count, 0, "Metadata list should not be empty");

            var route = $"{BasePath}/metadata";

            var metadataList = new MetadataIds
            {
                _MetadataIds = metadataIds
            };

            return(Observable
                   .FromAsync(async ar => await route.PostJsonAsync(metadataList).ReceiveJson <List <JObject> >())
                   .Select(l => l.Select(m => new MetadataMapping().Apply(m)).ToList()));
        }
        private void AddMetadataCriteria(SearchBuilder sb)
        {
//            List<int> idList1 = new List<int>();
//            List<int> idList2 = new List<int>();
//
//            for (int i = 1; i <= Settings.NumberOfMetadataFields; i++)
//            {
//                int id = 0;//GetMetadataId(i);
//
//                if (id > 0)
//                    idList1.Add(id);
//            }

            var idList1 = new List <int>();
            var idList2 = new List <int>();

            var ids = MetadataIds
                      .SelectMany(m => m.Value)
                      .Where(m => m > 0)
                      .Distinct()
                      .ToList();

            idList1.AddRange(ids);

            idList2.AddRange(idList1);

            foreach (int id in idList1)
            {
                Metadata metadata = MetadataCache.Instance.GetById(id);

                if (metadata.IsNull || metadata.MetadataId == 0)
                {
                    continue;
                }

                idList2.AddRange(metadata.GetIdList());
            }

            AddManyToManyCriteria(sb, "AssetMetadata", "MetadataId", idList2);
        }