Разница между LINQ для сущностей с и без ObjectResult - PullRequest
1 голос
/ 04 декабря 2009

У меня следующий запрос LINQ to Entities ...

var results = from c in context.Contacts
              select c;

, который прекрасно работает при возврате коллекции контактов. Но я видел пример кода, который делает это вместо ...

ObjectResult<Contact> results = (from c in context.Contacts
                                 select c).Execute();

Какая разница? ObjectResult также имеет коллекцию возвращенных контактов. Это просто синтаксис или есть принципиальная разница?

1 Ответ

4 голосов
/ 04 декабря 2009

ObjectResult <> - это просто тип, возвращаемый EF, когда вы начинаете перечислять IQueryable <> (т.е. context.Contacts).

Так что, если вы немедленно перечислите любой из двух ваших запросов, семантически это одно и то же.

Единственное отличие состоит в том, что в первом примере, если составить больше операций запроса, они будут добавлены к запросу, отправленному в базу данных при перечислении, тогда как во втором примере они будут применены в памяти LINQ to Objects.

Кроме того, Execute (..) обеспечивает несколько более простой доступ к MergeOptions (например, если копии базы данных перезаписывают копии, уже находящиеся в памяти, или наоборот). Вы можете сделать это, используя свойство MergeOptions в ObjectQuery <>, но это немного более громоздко.

Надеюсь, это поможет

Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...