Question: Does lazy loading load the entire collection even if you only iterate over the first item in the collection? Or does it only load the items that are iterated over within the collection?

...or do I have no idea what I'm talking about?

Answer: 
Lazy loading loads the whole collection when you start to iterate over the collection. Example: Suppose `user` 1 has the role "Role1", "Role2", "Role3" (`user.Roles` is `virtual`):

```
var user = context.Users.Single(u => u.Id == 1);
foreach (var role in user.Roles) // DB query happens here once
{
    Console.WriteLine(role.Name);
    if (role.Name == "Role1")
        break;
}

```

Although you never access `Role2` and `Role3` they have been loaded nonetheless.
It iterates over the projection once every time it iterates over the source enumerable.