LINQ-to-SQL caches returned objects; this serves to provide object identity (same instance returned each time), but it is also claimed that this is used to resolve some lookups:
Quote 1: http://msdn2.microsoft.com/en-us/library/bb399376.aspx
If the object requested by the query is easily identifiable as one already
retrieved, no query is executed.
Quote 2: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=345635&SiteID=1
The cache is checked when the query is a simple table.Where(pred) or table.First(pred) where the predicate refers only to the primary key.
However, I can find no use-case where it actually behaves this way. I can brute-force into the cache using reflection, but this is not ideal. Full sample code available.