Virtual rows are implemented with blocks. Most of the dataset methods I've already shown, such as select and where, accept blocks.