2009-12-04 3 views
1

je le LINQ suivante pour interroger des entités ...Différence entre LINQ to Entities avec et sans ObjectResult

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

qui fonctionne très bien en retournant une collection de contacts. Mais j'ai vu un exemple de code qui fait cela à la place ...

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

Quelle est la différence? ObjectResult possède également une collection de contacts renvoyés. Est-ce juste syntaxique ou existe-t-il une réelle différence fondamentale?

Répondre

4

ObjectResult <> est simplement le type retourné par EF lorsque vous commencez l'énumération de IQueryable <> (c'est-à-dire context.Contacts). Donc, si vous immédiatement énumérer l'une de vos deux requêtes, c'est la même chose sur le plan sémantique. La seule différence est que dans le premier exemple si composer plus d'opérations de requête ils seront ajoutés à la requête envoyée à la base de données quand vous énumérez, alors que dans le deuxième exemple ils seront appliqués en mémoire par LINQ aux objets. De plus, Execute (..) fournit un accès plus facile à MergeOptions (par exemple, si la copie de la base de données écrase des copies déjà en mémoire ou vice versa). Vous pouvez le faire en utilisant la propriété MergeOptions sur le ObjectQuery <> aussi, mais c'est un peu plus lourd.

Hope this helps

Alex