2010-10-11 6 views
2

Fait som som code ci-dessous pour illustrer mon exemple. Le problème est l'expression lambda. Si je le laisse comme dans l'exemple de code, il ne se sérialisera pas lorsque j'essayerai d'appeler le service. Cependant si je tape .ToList() après le lambda il sérialise comme il se doit.Pourquoi ne puis-je pas utiliser lambda lors de la sérialisation de DataContract?

Pourquoi est-ce? Je ne vois pas pourquoi le code ci-dessous ne devrait pas fonctionner ... Quelqu'un veut-il m'éclairer? :)

var list = new EntityPerson 
       { 
        Names = modelPerson.Names.Select(
            n => new EntityName 
               { 
                Text = n.Text 
               }) 
       } 
+1

Il serait utile si vous décrivez comment les classes impliquées sont déclarées. Et que voulez-vous dire par "ne sérialisera pas"? – VladV

Répondre

5

En raison de l'exécution différée. Vous ne stockez pas le résultat de l'exécution de lambda, mais plutôt l'arbre d'expression ou lambda lui-même, qui devrait sérialiser une référence (!) Au modelPerson.

http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx et beaucoup d'autres montrent les "problèmes" associés à cela. (Google pour "exécution différée. Net" pour plus.)

+0

Ouais je le savais mais je pensais encore qu'il lancerait la requête avant la sérialisation ... Merci pour la réponse rapide – debe