Método de extensión genérico: el argumento de tipo no se puede inferir del uso

Estoy tratando de crear un método de extensión genérico, que funcione en tablas de datos escritos:

public static class Extensions
{
    public static TableType DoSomething<TableType, RowType>(this TableType table, param Expression<Func<RowType, bool>>[] predicates)
        where TableType : TypedTableBase<RowType>
        where RowType : DataRow
    {
        // do something to each row of the table where the row matches the predicates
        return table;
    }

    [STAThread]
    public static void main()
    {
        MyTypedDataSet.MyTypedDataTable table = getDefaultTable();
    }

    public static MyTypedDataSet.MyTypedDataTable getDefaultTable()
    {
        // this line compiles fine and does what I want:
        return new MyTypedDataSet.MyTypedDataTable().DoSomething<MyTypedDataSet.MyTypedDataTable, MyTypedDataSet.MyTypedRow>(row => row.Field1 == "foo");

        // this line doesn't compile :
        return new MyTypedDataSet.MyTypedDataTable().DoSomething(row => row.Field1 == "foo");
        // Error : The type arguments .. cannot be inferred from the usage
    }
}

La primera línea funciona bien, pero es realmente fea ...
La segunda línea no se compila porque el compilador no puede inferir el tipo deRowType.
Este es un método que será utilizado como parte de un DataLayer por muchos programadores diferentes, por lo que preferiría no necesitarlos para especificar el TypeParameter.
¿No debería saber el compilador queRowType es el mismo tipo que el que utilizó TypedTableBase?

Por diferentes razones que pueden no ser obvias en este ejemplo de código, realmente necesito devolver la tabla de datos en su forma original. Y la razón por la que necesitoRowType es así la 'Expresión<Func<T, bool>>'será mecanografiado y visto por InteliSence.

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta