IRepository is just an interface that you create. It allows you to "decouple" your repositories from real implementations.
Decoupling is good because it means your code...:
Your code is much more reusable. This is just plain good. Your code can use Inversion of Control (or Dependency Injection). This is good to keep your concerns well separated. It is especially good because this allows Unit Testing... Your code can be Unit Tested. This is especially good in large projects with complex algorithms. It is good everywhere because it increases your understanding of the technologies you are working with and the domains you are trying to model in software. Your code becomes built around best practices, following a common pattern. This is good because it makes maintenance much easier.
More details: https://stackoverflow.com/a/4535781