Почему я не могу использовать лямбду при сериализации DataContract? - PullRequest
2 голосов
/ 11 октября 2010

Сделан сом-код ниже, чтобы проиллюстрировать мой пример. Проблема в лямбда-выражении. Если я оставлю это, как в примере кода, он не будет сериализован, когда я попытаюсь вызвать службу. Однако , если я наберу .ToList() после лямбды, она сериализуется как следует.

Почему это? Я не могу понять, почему код ниже не должен работать ... Кто-нибудь хочет меня просветить? :)

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

1 Ответ

5 голосов
/ 11 октября 2010

Это из-за отложенного выполнения. Вы сохраняете не результат лямбда-выполнения, а скорее дерево выражений или само лямбда, которое должно сериализовать ссылку (!) На modelPerson.

http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx и многие другие показывают «проблемы», связанные с этим. (Google для "отложенного выполнения .net" для больше.)

...