2010-09-30 67 views
0

我不知道如何說出這個問題,所以請原諒我,如果我不使用正確的術語。Linq 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創建「複雜」對象?

回答

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

無需使用'真的let'。您可以在代表「同意」的位置移動那麼多的代碼。無論哪種方式工作。 – 2010-09-30 19:38:25

+0

對我來說,'let'是一個美學選擇。我傾向於認爲超長的對象初始值設定項是不明智的。你是對的,但是 - 它會以任何方式工作。 – Ben 2010-09-30 19:43:00

+0

這看起來很有希望 - 我會在早上放一下 - 謝謝! – adrianos 2010-09-30 19:44:19