示例#1
0
        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);
        }
示例#2
0
        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]);
        }