AsEnumerable does not actually do anything except apply the as
operator to your IQueryable. Accordingly, any future method you apply to your object will use the System.Linq.Enumerable set of extension methods as opposed to the System.Linq.Queryable methods.
It's all about deferred execution. Nothing ever gets executed against your queryable source (the database presumably) until you try to enumerate.
In other words:
var data=Repository.Find().AsEnumerable()
/* The query is only actually performed AFTER here */
.ToList();
If your code:
var data=Repository.Find().ToList();
executes the query two times, it's because you're doing something incorrect in your Find() method, which should definitely should not be the case.
var data = Respository.Find();
should execute the query ZERO times.
var result = data.ToList(); // THIS is what should execute the query.