Of course, calling the .Count property yourself is more efficient, but not by orders of magnitude.
I think there is still some validity in my post in confusing whether you are using native accessing or routing through an additional tool/library, but the fix definitely elimates the performance hit I was discussing, so much of my post was in error.
edit: Also 3.5 it seems, I need to be more up-to-date with my concerns.
int countOfThings = DatabaseRepositoryType.GetThings().Count();
As it will go to the database, pull all of the matching rows locally, create all of the objects, and then iterate through them just increment a counter. Creating a .GetCount() method which calls down to a SQL "SELECT COUNT()" query is more work to write, but runs about a thousand times faster.
The SQL generated in this case depends on the return type of GetThings(). If it returns an IEnumerable<> then it is indeed a terrible thing to do, but if it returns an IQueryable<> then the SQL will be a SELECT COUNT() query, and no objects will be created.
Care does have to be taken when writing this sort of code!