Filter transformation

This article contains example code that shows the usage of the FilterTransformation component.

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.

public void ExampleFilterLinkingWithPredicate() {
    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
}

Filter transformation with dynamic

This examples shows how the FilterTransformation can be used with dynamic ExpandoObject.

public void ExampleFilterDynamic() {
    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

    /* Delete below here */
    Assert.Collection(dest.Data,
        row => { dynamic r = row; Assert.True(r.Id == 1 && r.Value == "Test1"); },
        row => { dynamic r = row; Assert.True(r.Id == 3 && r.Value == "Test3"); }
        );
}