示例#1
0
 /// <summary>
 /// Adds the items in the source collection to the destination
 /// collection. Does not add an item to the destination if it already exists.
 /// </summary>
 /// <param name="source"></param>
 /// <param name="destination"></param>
 public static void CopyDistinctTo <T>(
     this ICollection <T> source,
     ICollection <T> destination)
 {
     foreach (T item in source)
     {
         destination.AddDistinct <T>(item);
     }
 }
示例#2
0
        public void AddDistinct()
        {
            collection.AddDistinct(1);
            collection.AddDistinct(2);
            collection.AddDistinct(2);
            collection.AddDistinct(3);
            collection.AddDistinct(5);
            collection.AddDistinct(4);
            collection.AddDistinct(4);

            Assert.Equal(5, collection.Count);
            Assert.Equal(1, collection.ElementAt(0));
            Assert.Equal(2, collection.ElementAt(1));
            Assert.Equal(3, collection.ElementAt(2));
            Assert.Equal(5, collection.ElementAt(3));
            Assert.Equal(4, collection.ElementAt(4));
        }
        public virtual IEnumerable <TEntity> InsertOrUpdate(IEnumerable <TEntity> entities, TOptions options)
        {
            var list    = _innerCollection as IList <TEntity>;
            var inserts = new List <TEntity>();
            var updates = new List <TEntity>();

            if (list != null)
            {
                foreach (var entity in entities)
                {
                    _innerCollection.Add(entity);
                    OnInsertDetected(entity);
                }
            }
            else
            {
                foreach (var entity in entities)
                {
                    if (_innerCollection.AddDistinct(entity))
                    {
                        OnInsertDetected(entity);
                        inserts.Add(entity);
                    }
                    else
                    {
                        OnUpdateDetected(entity);
                        updates.Add(entity);
                    }
                }
            }

            if (inserts.Any())
            {
                OnBatchInsertDetected(inserts);
            }
            if (updates.Any())
            {
                OnBatchUpdateDetected(updates);
            }

            return(entities);
        }
示例#4
0
 internal static void FlagSpotAsUsed(Spot spot, ICollection <Guid> spotUidList)
 {
     spotUidList.AddDistinct(spot.Uid);
 }
 public static void AddRangeDistinct <T>(this ICollection <T> collection, IEnumerable <T> items,
                                         Func <T, T, bool> predicate)
 {
     items.ForEach(item => collection.AddDistinct(item, predicate));
 }
示例#6
0
 /// <summary>
 /// Adds to a collection the items of an <see cref="IEnumerable{T}"/> which are not already in collection using an equlaity comparer.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="collection"></param>
 /// <param name="items">Items to add</param>
 /// <param name="comparer">Predicate to use to determine if an item is already in the collection</param>
 /// <returns>Count of items added</returns>
 public static int AddRangeDistinct <T>(this ICollection <T> collection, IEnumerable <T> items, Func <T, T, bool> predicate)
 {
     return(items.Count(item => collection.AddDistinct(item, predicate)));
 }