2010-08-23 6 views
2

Que devrais-je retourner d'un service WCF lors de l'utilisation de LINQ? par exemple:Que retourner d'un service WCF lors de l'utilisation de linq?

var res = from q in context.cust 
      select q; 

Le LINQ suit l'exécution différée et donc l'instruction ne fait rien tant qu'une boucle for n'est pas exécutée. Cela signifie que je ne peux pas retourner res. Alors que dois-je retourner? Ai-je besoin d'écrire une boucle for et de remplir les objets et de renvoyer la liste à chaque fois que je veux renvoyer des données du service WCF? N'y a-t-il pas d'équivalent ADO.NET DataSet qui suit une architecture déconnectée et est idéal pour déplacer des données entre différents niveaux et à partir d'un service Web ou d'un service WCF?

Répondre

2

L'exécution est différée jusqu'à ce que les données soient réellement demandées, vous avez raison de dire que cela peut être une boucle for, mais ce serait aussi quand elle doit être sérialisée pour un transfert via WCF. Si vous rendez votre service WCF IEnumerable, la requête sera exécutée et les résultats retournés.

1

Si vous le renvoyez sous la forme IEnumerable<cust>, le sérialiseur WCF doit exécuter la requête.

Mais je le fais habituellement

var res = (from q in context.cust select q).ToList(); 
1

En raison du contexte mentionné dans votre requête, vous devez exécuter la requête explicitement par la conversion résultat tableau ou liste. Le contexte est probablement lié à Linq-To-Sql ou EF et il y a de fortes chances que lors de la sérialisation, l'exécution différée échoue car le contexte sera déjà fermé.

Questions connexes