Linq XML - создание сложных типов - PullRequest
0 голосов
/ 30 сентября 2010

Я не знаю, как сформулировать этот вопрос, так что извините, если я не использую правильную терминологию.

У меня есть System.Xml.Linq.XElement el, который содержит XML-документ.Я хочу запросить часть XElement и добавить пользовательские объекты (Upload) в общий список (UploadList, содержащийся в свойстве страницы), например:

this.UploadsList.Add((from el1 in el.Descendants("Uploads")
                                      select new Upload
                                      {
                                          Comments = el1.Element("Comments") != null ? el1.Element("Comments").Value : ""
                                          , 
                                          ***ConsentForImageUse.Text=el1.Element("SomeNode") != null ? el1.Element("SomeNode").Value : ""***
                                          ,
                                          DateImageProduced = el1.Element("DateImageProduced").Value != "" ? DateTime.Parse(el1.Element("DateImageProduced").Value) : DateTime.MinValue
                                          ,
                                          ImageTakenBy = el1.Element("ImageTakenBy") != null ? el1.Element("ImageTakenBy").Value : ""
                                      }).First<Upload>());

Компилятор жалуется на битсо звездочками.

Мой объект загрузки имеет свойство ConsentForImageUse, которое само по себе является классом с парой свойств.

Ошибка Недопустимый элемент объявления инициализатора .Кто-нибудь знает, могу ли я создавать «сложные» объекты с помощью Linq, как это?

1 Ответ

2 голосов
/ 30 сентября 2010

Из-за способа указания инициализаторов объектов нельзя установить свойство свойства в одном.Вместо этого создайте объект ConsentForImageUse в качестве привязки let в запросе LINQ и назначьте его свойству ConsentForImageUse объекта Upload.Без дальнейшего знания вашей точной объектной модели я сделал некоторые предположения, но это должно сработать для вас.

var uploads = from el1 in el.Descendants("Uploads")
              let consent = new ConsentForImageUse() { Text = el1.Element("SomeNode") != null ? el1.Element("SomeNode").Value : string.Empty }
              select new Upload
              {
                  Comments = el1.Element("Comments") != null ? el1.Element("Comments").Value : string.Empty,
                  ConsentForImageUse = consent,
                  DateImageProduced = el1.Element("DateImageProduced") != null ? el1.Element("DateImageProduced").Value : string.Empty,
                  ImageTakenBy = el1.Element("ImageTakenBy") != null ? el1.Element("ImageTakenBy").Value : string.Empty
              };

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