/// <summary> /// Gets metadata list given an array of metadata ids /// </summary> /// <param name="metadataIds">The array of metadata ids</param> /// <returns>IObservable<IList<Metadata>></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); }