public MagicList<E> where(String expression) {
        MagicList<E> result = new MagicList<E>();
        try {
            final Object ognlTree = Ognl.parseExpression(expression);
            for (int i = 0; i < this.size(); i++) {
                E object = this.get(i);
                if ((Boolean) Ognl.getValue(ognlTree, object)) {
                    result.add(object);
                }
            }
        } catch (OgnlException e) {
            throw new RuntimeException(e);
        }
        return result;
    }