コード例 #1
0
ファイル: GroupByAggregator.cs プロジェクト: sscctech/NRules
        private IEnumerable <AggregationResult> Add(TKey key, TElement element)
        {
            if (Equals(key, _defaultKey))
            {
                if (_defaultGroup == null)
                {
                    _defaultGroup = new Grouping(key);
                    _defaultGroup.Add(element);
                    return(new[] { AggregationResult.Added(_defaultGroup) });
                }
                _defaultGroup.Add(element);
                return(new[] { AggregationResult.Modified(_defaultGroup) });
            }

            Grouping group;

            if (!_groups.TryGetValue(key, out group))
            {
                group        = new Grouping(key);
                _groups[key] = group;

                group.Add(element);
                return(new[] { AggregationResult.Added(group) });
            }

            group.Add(element);
            return(new[] { AggregationResult.Modified(group) });
        }
コード例 #2
0
        public IEnumerable <AggregationResult> Modify(AggregationContext context, ITuple tuple, IEnumerable <IFact> facts)
        {
            var results = new List <AggregationResult>();

            foreach (var fact in facts)
            {
                var collection = (IEnumerable <TElement>)fact.Value;
                foreach (var value in collection)
                {
                    if (_firstElements.TryGetValue(fact, out var oldFirst))
                    {
                        if (Equals(oldFirst, value))
                        {
                            results.Add(AggregationResult.Modified(value, value, Enumerable.Repeat(fact, 1)));
                        }
                        else
                        {
                            results.Add(AggregationResult.Removed(oldFirst));
                            results.Add(AggregationResult.Added(value, Enumerable.Repeat(fact, 1)));
                        }
                    }
                    else
                    {
                        results.Add(AggregationResult.Added(value, Enumerable.Repeat(fact, 1)));
                    }
                    _firstElements[fact] = value;
                    break;
                }
            }
            return(results);
        }
コード例 #3
0
        public IEnumerable <AggregationResult> Add(object fact)
        {
            var source = (TSource)fact;
            var value  = _selector(source);

            _sourceToValue[source] = value;
            return(new[] { AggregationResult.Added(value) });
        }
コード例 #4
0
        public IEnumerable <AggregationResult> Add(object fact)
        {
            var source = (TSource)fact;
            var value  = _selector(source);
            var list   = value.ToList();

            _sourceToList[source] = list;

            return(list.Select(x => AggregationResult.Added(x)).ToArray());
        }
コード例 #5
0
 public IEnumerable <AggregationResult> Add(ITuple tuple, IEnumerable <IFact> facts)
 {
     AddFacts(facts);
     if (!_created)
     {
         _created = true;
         return(new[] { AggregationResult.Added(_items) });
     }
     return(new[] { AggregationResult.Modified(_items) });
 }
コード例 #6
0
        public IEnumerable <AggregationResult> Modify(object fact)
        {
            var source  = (TSource)fact;
            var value   = _selector(source);
            var list    = value.ToList();
            var oldList = _sourceToList[source];

            _sourceToList[source] = list;

            return(oldList.Select(x => AggregationResult.Removed(x)).Concat(
                       list.Select(x => AggregationResult.Added(x))).ToArray());
        }
コード例 #7
0
        public IEnumerable <AggregationResult> Add(ITuple tuple, IEnumerable <IFact> facts)
        {
            var results = new List <AggregationResult>();

            foreach (var fact in facts)
            {
                var value = _selector.Invoke(tuple, fact);
                _sourceToValue[fact] = value;
                results.Add(AggregationResult.Added(value));
            }
            return(results);
        }
コード例 #8
0
        public IEnumerable <AggregationResult> Add(IEnumerable <object> facts)
        {
            var results = new List <AggregationResult>();

            foreach (var fact in facts)
            {
                var source = (TSource)fact;
                var value  = _selector(source);
                _sourceToValue[source] = value;
                results.Add(AggregationResult.Added(value));
            }
            return(results);
        }
コード例 #9
0
        private AggregationResult Add(TKey key, TElement element)
        {
            Grouping group;

            if (!_groups.TryGetValue(key, out group))
            {
                group        = new Grouping(key);
                _groups[key] = group;

                group.Add(element);
                return(AggregationResult.Added(group));
            }

            group.Add(element);
            return(AggregationResult.Modified(group));
        }
コード例 #10
0
        public IEnumerable <AggregationResult> Add(AggregationContext context, ITuple tuple, IEnumerable <IFact> facts)
        {
            var results = new List <AggregationResult>();

            foreach (var fact in facts)
            {
                var collection = (IEnumerable <TElement>)fact.Value;
                foreach (var value in collection)
                {
                    _firstElements[fact] = value;
                    results.Add(AggregationResult.Added(value, Enumerable.Repeat(fact, 1)));
                    break;
                }
            }
            return(results);
        }
コード例 #11
0
        public IEnumerable <AggregationResult> Modify(object fact)
        {
            var source   = (TSource)fact;
            var value    = _selector(source);
            var oldValue = _sourceToValue[source];

            _sourceToValue[source] = value;

            if (Equals(oldValue, value))
            {
                return new[] { AggregationResult.Modified(value) }
            }
            ;

            return(new[] { AggregationResult.Removed(oldValue), AggregationResult.Added(value) });
        }
コード例 #12
0
        public IEnumerable <AggregationResult> Add(IEnumerable <object> facts)
        {
            var results = new List <AggregationResult>();

            foreach (var fact in facts)
            {
                var source = (TSource)fact;
                var value  = _selector(source);
                var list   = new List <TResult>(value);
                _sourceToList[source] = list;
                foreach (var item in list)
                {
                    results.Add(AggregationResult.Added(item));
                }
            }
            return(results);
        }
コード例 #13
0
        public IEnumerable <AggregationResult> Modify(ITuple tuple, IEnumerable <IFact> facts)
        {
            var results = new List <AggregationResult>();

            foreach (var fact in facts)
            {
                var source   = (TSource)fact.Value;
                var value    = _selector.Invoke(tuple, fact);
                var oldValue = (TResult)_sourceToValue[source];
                _sourceToValue[source] = value;

                if (Equals(oldValue, value))
                {
                    results.Add(AggregationResult.Modified(value));
                }
                else
                {
                    results.Add(AggregationResult.Removed(oldValue));
                    results.Add(AggregationResult.Added(value));
                }
            }
            return(results);
        }
コード例 #14
0
 public IEnumerable <AggregationResult> Initial()
 {
     return(new[] { AggregationResult.Added(_items) });
 }