public void SimpleLookupWithDynamicObject(IConnectionManager connection)
        {
            //Arrange
            TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture(connection, "SourceLookupDynamicObject");

            source2Columns.InsertTestData();
            FourColumnsTableFixture dest4Columns = new FourColumnsTableFixture(connection, "DestinationLookupDynamicObject", -1);


            DBSource <ExpandoObject>      source = new DBSource <ExpandoObject>(connection, "SourceLookupDynamicObject");
            DBDestination <ExpandoObject> dest   = new DBDestination <ExpandoObject>(connection, "DestinationLookupDynamicObject");

            //Act
            List <ExpandoObject> lookupList = new List <ExpandoObject>();

            CSVSource <ExpandoObject> lookupSource = new CSVSource <ExpandoObject>("res/Lookup/LookupSource.csv");

            var lookup = new ETLBox.DataFlow.Lookup <ExpandoObject, ExpandoObject>(
                row =>
            {
                dynamic r = row as ExpandoObject;
                r.Col3    = lookupList
                            .Where(lkupRow => { dynamic lk = lkupRow as dynamic;  return(int.Parse(lk.Key) == r.Col1); })
                            .Select(lkupRow => { dynamic lk = lkupRow as dynamic;
                                                 return(lk.Column3 == string.Empty ? null : Int64.Parse(lk.Column3)); })
                            .FirstOrDefault();
                r.Col4 = lookupList
                         .Where(lkupRow => { dynamic lk = lkupRow as dynamic; return(int.Parse(lk.Key) == r.Col1); })
                         .Select(lkupRow => { dynamic lk = lkupRow as dynamic; return(double.Parse(lk.Column4)); })
                         .FirstOrDefault();
                return(row);
            },
                lookupSource,
                lookupList
                );

            source.LinkTo(lookup);
            lookup.LinkTo(dest);
            source.Execute();
            dest.Wait();

            //Assert
            dest4Columns.AssertTestData();
        }
Example #2
0
        public void InputTypeSameAsOutput(IConnectionManager connection)
        {
            //Arrange
            FourColumnsTableFixture source4Columns = new FourColumnsTableFixture(connection, "SourceLookupSameType");

            source4Columns.InsertTestData();
            FourColumnsTableFixture dest4Columns   = new FourColumnsTableFixture(connection, "DestinationLookupSameType");
            FourColumnsTableFixture lookup4Columns = new FourColumnsTableFixture(connection, "LookupSameType");

            lookup4Columns.InsertTestData();

            DBSource <MyOutputDataRow> source       = new DBSource <MyOutputDataRow>(connection, "SourceLookupSameType");
            DBSource <MyLookupRow>     lookupSource = new DBSource <MyLookupRow>(connection, "LookupSameType");

            var lookup = new ETLBox.DataFlow.Lookup <MyOutputDataRow, MyLookupRow>();

            lookup.RowTransformationFunc =
                row =>
            {
                row.Col1 = row.Col1;
                row.Col2 = row.Col2;
                row.Col3 = lookup.LookupList.Where(ld => ld.Key == row.Col1).Select(ld => ld.LookupValue1).FirstOrDefault();
                row.Col4 = lookup.LookupList.Where(ld => ld.Key == row.Col1).Select(ld => ld.LookupValue2).FirstOrDefault();
                return(row);
            };
            lookup.Source = lookupSource;
            DBDestination <MyOutputDataRow> dest = new DBDestination <MyOutputDataRow>(connection, "DestinationLookupSameType");

            source.LinkTo(lookup);
            lookup.LinkTo(dest);
            source.Execute();
            dest.Wait();

            //Assert
            dest4Columns.AssertTestData();
        }