ObjectResult <> - это просто тип, возвращаемый EF, когда вы начинаете перечислять IQueryable <> (т.е. context.Contacts).
Так что, если вы немедленно перечислите любой из двух ваших запросов, семантически это одно и то же.
Единственное отличие состоит в том, что в первом примере, если составить больше операций запроса, они будут добавлены к запросу, отправленному в базу данных при перечислении, тогда как во втором примере они будут применены в памяти LINQ to Objects.
Кроме того, Execute (..) обеспечивает несколько более простой доступ к MergeOptions (например, если копии базы данных перезаписывают копии, уже находящиеся в памяти, или наоборот). Вы можете сделать это, используя свойство MergeOptions в ObjectQuery <>, но это немного более громоздко.
Надеюсь, это поможет
Alex