示例#1
0
        protected ResultSet.ResultSet Apply(ResultSet.ResultSet rs, Func <bool, bool> onApply)
        {
            var filteredRs = new ResultSet.ResultSet();
            var table      = rs.Table.Clone();

            filteredRs.Load(table);
            filteredRs.Table.Clear();

            foreach (DataRow row in rs.Rows)
            {
                if (onApply(RowApply(row)))
                {
                    if (filteredRs.Rows.Count == 0 && filteredRs.Columns.Count != row.Table.Columns.Count)
                    {
                        foreach (DataColumn column in row.Table.Columns)
                        {
                            if (!filteredRs.Columns.Cast <DataColumn>().Any(x => x.ColumnName == column.ColumnName))
                            {
                                filteredRs.Columns.Add(column.ColumnName, typeof(object));
                            }
                        }
                    }
                    filteredRs.Table.ImportRow(row);
                }
            }

            filteredRs.Table.AcceptChanges();
            return(filteredRs);
        }
示例#2
0
        public virtual ResultSet.ResultSet Transform(ResultSet.ResultSet resultSet)
        {
            foreach (var identifier in cacheTransformers.Keys)
            {
                var tsStart     = DateTime.Now;
                var transformer = cacheTransformers[identifier];

                var newColumn = new DataColumn()
                {
                    DataType = typeof(object)
                };
                resultSet.Table.Columns.Add(newColumn);

                var ordinal = (identifier as ColumnOrdinalIdentifier)?.Ordinal ?? resultSet.Table.Columns[(identifier as ColumnNameIdentifier).Name].Ordinal;

                foreach (DataRow row in resultSet.Table.Rows)
                {
                    row[newColumn.Ordinal] = transformer.Execute(row[ordinal]);
                }

                resultSet.Table.Columns.RemoveAt(ordinal);
                newColumn.SetOrdinal(ordinal);

                Trace.WriteLineIf(Extensibility.NBiTraceSwitch.TraceInfo, string.Format("Time needed to transform column {0}: {1}", identifier.Label, DateTime.Now.Subtract(tsStart).ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));
            }

            return(resultSet);
        }
示例#3
0
文件: NoneGrouping.cs 项目: ywscr/NBi
 public IDictionary <KeyCollection, DataTable> Execute(ResultSet.ResultSet resultSet)
 {
     return(new Dictionary <KeyCollection, DataTable>()
     {
         { new KeyCollection(Array.Empty <object>()), resultSet.Table }
     });
 }
示例#4
0
 public IDictionary <KeyCollection, DataTable> Execute(ResultSet.ResultSet resultSet)
 {
     return(new Dictionary <KeyCollection, DataTable>()
     {
         { new KeyCollection(new object[] { }), resultSet.Table }
     });
 }
示例#5
0
        public virtual ResultSet.ResultSet Transform(ResultSet.ResultSet resultSet)
        {
            foreach (var index in cacheTransformers.Keys)
            {
                var tsStart     = DateTime.Now;
                var transformer = cacheTransformers[index];

                var newColumn = new DataColumn()
                {
                    DataType = typeof(object)
                };
                resultSet.Table.Columns.Add(newColumn);

                foreach (DataRow row in resultSet.Table.Rows)
                {
                    row[newColumn.Ordinal] = transformer.Execute(row[index]);
                }

                resultSet.Table.Columns.RemoveAt(index);
                newColumn.SetOrdinal(index);

                Trace.WriteLineIf(NBiTraceSwitch.TraceInfo, string.Format("Time needed to transform column with index {0}: {1}", index, DateTime.Now.Subtract(tsStart).ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));
            }

            return(resultSet);
        }
示例#6
0
 public ResultSet.ResultSet Apply(ResultSet.ResultSet rs)
 {
     if (rs == null)
     {
         throw new ArgumentNullException();
     }
     return(rs);
 }
示例#7
0
        public ResultSet.ResultSet AntiApply(ResultSet.ResultSet rs)
        {
            if (rs == null)
            {
                throw new ArgumentNullException();
            }

            var filteredRs = new ResultSet.ResultSet();
            var table      = rs.Table.Clone();

            filteredRs.Load(table);
            return(filteredRs);
        }
示例#8
0
        public ResultSet.ResultSet Apply(ResultSet.ResultSet rs)
        {
            var newRs  = rs.Clone();
            var groups = groupBy.Execute(rs);

            foreach (var group in groups)
            {
                var groupRs = new ResultSet.ResultSet();
                groupRs.Load(group.Value);
                var filtered = filter.Apply(groupRs);
                newRs.AddRange(filtered.Rows.Cast <DataRow>());
            }
            return(newRs);
        }
示例#9
0
        public ResultSet.ResultSet Apply(ResultSet.ResultSet rs)
        {
            IList <ScoredObject> subset = new List <ScoredObject>();
            var scorer = new DataRowScorer(Operand, Aliases, Expressions);

            foreach (DataRow row in rs.Rows)
            {
                var score = scorer.Execute(row);
                InsertRow(score, ref subset);
            }

            var newRs = rs.Clone();

            newRs.Load(subset.Select(x => x.Value as DataRow));
            return(newRs);
        }
示例#10
0
        protected ResultSet.ResultSet Apply(ResultSet.ResultSet rs, Func <bool, bool> onApply)
        {
            var filteredRs = new ResultSet.ResultSet();
            var table      = rs.Table.Clone();

            filteredRs.Load(table);

            foreach (DataRow row in rs.Rows)
            {
                if (onApply(RowApply(row)))
                {
                    filteredRs.Table.ImportRow(row);
                }
            }

            filteredRs.Table.AcceptChanges();
            return(filteredRs);
        }
示例#11
0
        protected ResultSet.ResultSet Apply(ResultSet.ResultSet rs, Func <bool, bool> onApply)
        {
            var filteredRs = new ResultSet.ResultSet();
            var table      = rs.Table.Clone();

            filteredRs.Load(table);

            foreach (DataRow row in rs.Rows)
            {
                var value = GetValueFromRow(row, operand);
                if (onApply(executeFunction(value)))
                {
                    filteredRs.Table.ImportRow(row);
                }
            }

            filteredRs.Table.AcceptChanges();
            return(filteredRs);
        }
示例#12
0
        public IDictionary <KeyCollection, DataTable> Execute(ResultSet.ResultSet resultSet)
        {
            var stopWatch   = new Stopwatch();
            var dico        = new Dictionary <KeyCollection, DataTable>();
            var keyComparer = BuildDataRowsKeyComparer(resultSet.Table);

            stopWatch.Start();
            foreach (DataRow row in resultSet.Rows)
            {
                var key = keyComparer.GetKeys(row);
                if (!dico.ContainsKey(key))
                {
                    dico.Add(key, row.Table.Clone());
                }
                dico[key].ImportRow(row);
            }
            Trace.WriteLineIf(NBiTraceSwitch.TraceInfo, string.Format("Building rows' groups: {0} [{1}]", dico.Count, stopWatch.Elapsed.ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));

            return(dico);
        }
示例#13
0
        protected ResultSet.ResultSet Apply(ResultSet.ResultSet rs, Func <bool, bool> onApply)
        {
            var filteredRs = new ResultSet.ResultSet();
            var table      = rs.Table.Clone();

            filteredRs.Load(table);


            var factory   = new PredicateFactory();
            var predicate = factory.Get(predicateInfo);

            foreach (DataRow row in rs.Rows)
            {
                var dico = new Dictionary <string, object>();
                foreach (var variable in variables)
                {
                    dico.Add(variable.Name, row[variable.Column]);
                }

                foreach (var expression in expressions)
                {
                    var exp = new NCalc.Expression(expression.Value);
                    exp.Parameters = dico;
                    var result = exp.Evaluate();
                    dico.Add(expression.Name, result);
                }

                var value = dico[predicateInfo.Name];
                if (onApply(predicate.Compare(value, predicateInfo.Reference)))
                {
                    filteredRs.Table.ImportRow(row);
                }
            }

            filteredRs.Table.AcceptChanges();
            return(filteredRs);
        }
示例#14
0
 public ResultSet.ResultSet Apply(ResultSet.ResultSet rs)
 {
     return(Apply(rs, (x => x)));
 }
示例#15
0
 public ResultSet.ResultSet AntiApply(ResultSet.ResultSet rs)
 => throw new NotImplementedException();