public async Task <List <TItem> > GetItem <TItem>(List <ulong> itemIds, string endpointPath, IMongoCollection <TItem> collection) where TItem : IgdbItem { if (!itemIds.HasItems()) { return(null); } var filter = Builders <TItem> .Filter.In(nameof(IgdbItem.id), itemIds); var cacheItems = collection.Find(filter).ToList(); if (cacheItems.Count == itemIds.Count) { return(cacheItems); } var idsToGet = ListExtensions.GetDistinctItemsP(itemIds, cacheItems.Select(a => a.id)); var stringResult = await SendStringRequest(endpointPath, $"fields *; where id = ({string.Join(',', idsToGet)}); limit 500;"); var items = Serialization.FromJson <List <TItem> >(stringResult); collection.InsertMany(items); cacheItems.AddRange(items); return(cacheItems); }
public void GetDistinctItemsTest() { List <int> list1 = new List <int> { 1, 2, 3, 4, }; List <int> list2 = new List <int> { 1, 2 }; List <int> list3 = new List <int> { 1, 2, 5 }; var distinct = ListExtensions.GetDistinctItems(new List <List <int> > { list1, list2, list3 }).ToArray(); Assert.AreEqual(3, distinct.Count()); Assert.AreEqual(3, distinct[0]); Assert.AreEqual(4, distinct[1]); Assert.AreEqual(5, distinct[2]); ListExtensions.GetDistinctItemsP(list1, list2, list3).ToArray(); Assert.AreEqual(3, distinct.Count()); Assert.AreEqual(3, distinct[0]); Assert.AreEqual(4, distinct[1]); Assert.AreEqual(5, distinct[2]); }