DataTable.Select次の方法を試すことができます。
public static class ExpressionExtensions {
public static IEnumerable<T> Select<T>(this IEnumerable<T> self, string expression) {
var table = new DataTable();
table.Columns.Add("Value", typeof(T));
foreach (var item in self) {
var row = table.NewRow();
row["Value"] = item;
table.Rows.Add(item);
}
return table.Select(expression).Select(row => (T)row["Value"]);
}
}
ただし、式を作成するには、その形式に従う必要があります。
var filtered = strings.Select("NOT Value LIKE '*water*' OR (Value LIKE '*ice*' AND Value LIKE '*fruit juice*')");
また、この場合、文字列にfruit juiceは既に string が含まれているためice、2 番目の条件は冗長であることに注意してください。「部分文字列」ではなく「単語」を表現する方法を見つける必要があります。
最終的には、解析ロジックを自分で実装したほうがよいかもしれません。