Linq a objetos Predicate Builder

¿Cuál es la mejor manera de hacer una consulta condicional usando linq para objetos (no linq para sql).

Actualmente estoy usando el generador de predicados que se encuentra aquíhttp: //www.albahari.com/nutshell/predicatebuilder.asp y pasar el predicado compilado a IEnumerable.Where y parece funcionar bien.

Código de ejemplo de lo que quiero resolver:

eg tengo este

 string keyword1 = "Test1";
 string keyword2 = "Test3";

        IEnumerable<TestObject> tests = new List<TestObject>()
                                     {
                                         new TestObject() {Name1 = "Test1", Name2 = "Test1"},
                                         new TestObject() {Name1 = "Test2", Name2 = "Test2"},
                                         new TestObject() {Name1 = "Test3", Name2 = "Test3"},

                                     };

        if (!String.IsNullOrEmpty(keyword1) && String.IsNullOrEmpty(keyword2))
            tests = tests.Where(e => e.Name1.Contains(keyword1));
        else if (!String.IsNullOrEmpty(keyword2) && !String.IsNullOrEmpty(keyword1))
            tests = tests.Where(e => e.Name2.Contains(keyword2) || e.Name1.Contains(keyword1));

        return tests.ToList();