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(); }
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(); }