2012-12-18 21 views
0

我正在使用XDocument庫讀取XML文檔,並使用C#中的LINQ查詢列表。我將一個浮動列表返回到一個隱式變量。 anynmous類型是一個簡單的結構。我不知道我在做什麼錯,但想將它返回到我已經定義的類的List中,但是在將這個匿名類型轉換爲我的自定義類時出現錯誤。我錯過了一些明顯的東西。我不想在這裏使用動態輸入。將列表轉換爲自定義對象

public class CustomClass 
    { 
     public string id { get; set; } 
     public int fileName { get; set; } 
    } 

XDocument optXML = XDocument.Load(pathName); 

var optInput = (from item in optXML.Descendants("Group") 
        select new 
        { 
         id = (int)item.Attribute("ID"), 
         fileName = (string)item.Attribute("FileName") 
        }).ToList(); 
foreach (CustomClass item in optInput) 
     { 
      Console.WriteLine(item.id); 
     } 

回答

1

可以使用var,而不是自定義類型,它會通過在投影編譯器生成的類型使用新的。

foreach (var item in optInput) 
{ 
    Console.WriteLine(item.id); 
} 

,或者你可以創建類即CustomClass而不是使用匿名類型的對象。

var optInput = (from item in optXML.Descendants("Group") 
       select new CustomClass 
       { 
        id = (int)item.Attribute("ID"), 
        fileName = (string)item.Attribute("FileName") 
       }).ToList(); 
+0

有沒有辦法直接導入到自定義類像列表 =(從項目中optXML.Descendants( 「本集團」) 選擇新 { ID =(INT)item.Attribute( 「ID」), fileName =(string)item.Attribute(「FileName」) })。ToList(); – JBone

+0

我已經更新了我的答案。 – Adil

4

而不是選擇new{}選擇new CustomClass()的:

public class CustomClass 
    { 
     public string id { get; set; } 
     public int fileName { get; set; } 
    } 

XDocument optXML = XDocument.Load(pathName); 

var optInput = (from item in optXML.Descendants("Group") 
        select new CustomClass() 
        { 
         id = (int)item.Attribute("ID"), 
         fileName = (string)item.Attribute("FileName") 
        }).ToList(); 
foreach (CustomClass item in optInput) 
     { 
      Console.WriteLine(item.id); 
     } 
2

我想你想突出到CustomClass,而不是一個匿名對象

List<CustomClass> optInput = (from item in optXML.Descendants("Group") 
       select new CustomClass 
       { 
        id = (int)item.Attribute("ID"), 
        fileName = (string)item.Attribute("FileName") 
       }).ToList(); 

有沒有具體的理由去改變var在你的代碼List<CustomClass> - 我只是做了它向你展示你實際上開始G。

1

你會得到這個錯誤,因爲你在查詢中選擇的匿名類型不是CustomClass。你可以簡單地選擇Customclass本身像這樣

select new CustomClass { id = , fileName = } 

或使用anomymous類型,像這樣的foreach

foreach (var item in optInput) 
    { 
     Console.WriteLine(item.id); 
    }  

裏面,你會得到完全的智能感知它。

相關問題