First off, follow what Frank Schwieterman stated. Let your repositories grow as their usage grows. In addition, learn about and make use of the IQueryable interfaces. L2S, along with Entity Framework, LINQ to nHibernate, and some of the newer ORM's like SubSonic and Telerik's ORM, all support the IQueryable interface.
In the cases where you need mutable queries from your repository, but still want the benefit of interchanging OR mappers if needed, IQueryable is a powerful tool. Assume something like the following:
public class ProductRepository: IProductRepository
{
public Product GetByID(int id);
public IList<Product> GetAll();
public void Insert(Product product);
public Product Update(Product product);
public void Delete(Product product);
}
This is a pretty common repository, with the bare bones common methods. Over time, you may end up with a bunch more methods:
public IList<Product> GetByOrder(Order order);
public IList<Product> GetByCategory(Category category);
public IList<Product> GetByQuantityInStock(int quantityInStock);
This is also pretty common, and depending on how you like to approach the problem, perfectly acceptable. However, in the long run, your repository can grow to an unwieldy size, and its interface will always be changing. You also loose the real benefit of using an OR mapper behind the scenes.
You can keep the original, simple repository interface, but still provide yourself with a lot of flexibility, if you change one method:
public IQueryable<Product> GetAll();
Your repository now returns a query, rather than a list of already-retrieved objects. You are now free to use this query like any other LINQ enabled object:
var productsWithLowStock = productRepository.GetAll().Where(p => p.Quantity < 10);
var orders = orderRepository.GetAll();
var productsWithOrders = productRepository.GetAll().Where(p => orders.OrderLines.Any(ol => ol.ProductID == p.ProductID));
Once you start using the IQueryable interface with your repositories, you gain the best of both worlds: A mockable abstraction around your lower-level data access, as well as the power of dynamic querying within your code. You can take the concept a little farther, and create a base Repository class that implements IQueryable itself, allowing you to eliminate the need for the GetAll() call, and simply query the repository directly (albeit with another degree of complexity.)