代码之家  ›  专栏  ›  技术社区  ›  adrianos

LINQ XML-创建复杂类型

  •  0
  • adrianos  · 技术社区  · 15 年前

    我不知道该如何用词来表达这个问题,所以如果我没有使用正确的术语,请原谅我。

    我有一个 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 回复  |  直到 15 年前
        1
  •  2
  •   Ahmad Mageed    15 年前

    由于对象初始值设定项的指定方式,不能在其中设置属性的属性。相反,在Linq查询中创建一个ConsentForImageuse对象作为let绑定,并将其分配给上载对象的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());
    
    推荐文章