Linq XML - 创建复杂类型

时间:2010-09-30 16:00:14

标签: linq-to-xml

我不清楚如何说出这个问题,如果我不使用正确的术语,请原谅我。

我有一个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 个答案:

答案 0 :(得分:2)

由于指定了对象初始值设定项的方式,因此无法在一个属性中设置属性。而是在您的LINQ查询中创建一个ConsentForImageUse对象作为let绑定,并将其分配给Upload对象的ConsentForImageUse属性。在没有进一步了解你的精确对象模型的情况下,我做了一些假设,但这应该适合你。

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());