Я знаю, что это не то, что вы ищете, а просто точка зрения:
В зависимости от того, сколько различных видов операций вы ожидаете выполнить, я бы создал оператор switch для этого.
В качестве примера, некоторый псевдокод с использованием перечисления:
(OperationType - это Enum, если необходимо)
private object example(OperationType optype, Object obj, String match)
{
var q;
switch (optype)
{
case OperationType.Contains:
q = obj.Where(o => o.message.Contains(match));
break;
case OperationType.EndsWith:
q = obj.Where(o => o.message.EndsWith(match));
break;
case OperationType.StartsWith:
q = obj.Where(o => o.message.StartsWith(match));
break;
}
return q;
}