Filter transformation This article contains example code that shows the usage of the FilterTransformation component.
On this page Filter with POCO# This example shows how to filter data in a data flow with a strongly typed objects
public class MyRow
{
public int Id { get ; set ; }
public string Value { get ; set ; }
}
public void ExampleFilterPoco () {
var source = new MemorySource < MyRow >();
source . DataAsList . Add ( new MyRow () { Id = 1 , Value = "Test1" });
source . DataAsList . Add ( new MyRow () { Id = 2 , Value = "Test2" });
source . DataAsList . Add ( new MyRow () { Id = 3 , Value = "Test3" });
var filter = new FilterTransformation < MyRow >();
filter . FilterPredicate = row => {
return row . Id == 2 ;
};
var dest = new MemoryDestination < MyRow >();
source . LinkTo ( filter ). LinkTo ( dest );
Network . Execute ( source );
foreach ( var row in dest . Data )
Console . WriteLine ( $"Id:{row.Id} Value:{row.Value}" );
//Outputs
//Id:1 Value:Test1
//Id:3 Value:Test3
}
Filter with Predicate linking# This example has the same effect as the previous code, but now we are using predicates in the LinkTo
methods.
var source = new MemorySource < MyRow >();
source . DataAsList . Add ( new MyRow () { Id = 1 , Value = "Test1" });
source . DataAsList . Add ( new MyRow () { Id = 2 , Value = "Test2" });
source . DataAsList . Add ( new MyRow () { Id = 3 , Value = "Test3" });
var dest = new MemoryDestination < MyRow >();
var voidDest = new VoidDestination < MyRow >();
source . LinkTo ( dest , row => row . Id != 2 );
source . LinkTo ( voidDest , row => row . Id == 2 );
Network . Execute ( source );
foreach ( var row in dest . Data )
Console . WriteLine ( $"Id:{row.Id} Value:{row.Value}" );
//Outputs
//Id:1 Value:Test1
//Id:3 Value:Test3
/* Delete below here */
Assert . Collection ( dest . Data ,
r => Assert . True ( r . Id == 1 && r . Value == "Test1" ),
r => Assert . True ( r . Id == 3 && r . Value == "Test3" )
);
Predicate linking with implicit void# This example shows how the third parameter of the LinkTo
method can be used to discard unwanted records.
public void ExampleFilterLinkingWithPredicateAndImplicitVoid () {
var source = new MemorySource < MyRow >();
source . DataAsList . Add ( new MyRow () { Id = 1 , Value = "Test1" });
source . DataAsList . Add ( new MyRow () { Id = 2 , Value = "Test2" });
source . DataAsList . Add ( new MyRow () { Id = 3 , Value = "Test3" });
var dest = new MemoryDestination < MyRow >();
source . LinkTo ( dest , row => row . Id != 2 , row => row . Id == 2 );
Network . Execute ( source );
foreach ( var row in dest . Data )
Console . WriteLine ( $"Id:{row.Id} Value:{row.Value}" );
//Outputs
//Id:1 Value:Test1
//Id:3 Value:Test3
}
This examples shows how the FilterTransformation
can be used with dynamic ExpandoObject
.
var source = new MemorySource ();
dynamic r1 = new ExpandoObject ();
r1 . Id = 1 ; r1 . Value = "Test1" ;
source . DataAsList . Add ( r1 );
dynamic r2 = new ExpandoObject ();
r2 . Id = 2 ; r2 . Value = "Test2" ;
source . DataAsList . Add ( r2 );
dynamic r3 = new ExpandoObject ();
r3 . Id = 3 ; r3 . Value = "Test3" ;
source . DataAsList . Add ( r3 );
var filter = new FilterTransformation ();
filter . FilterPredicate = row => {
dynamic r = row ;
return r . Id == 2 ;
};
var dest = new MemoryDestination ();
source . LinkTo ( filter ). LinkTo ( dest );
Network . Execute ( source );
foreach ( dynamic row in dest . Data )
Console . WriteLine ( $"Id:{row.Id} Value:{row.Value}" );
//Outputs
//Id:1 Value:Test1
//Id:3 Value:Test3