2012-12-05 55 views
2

我試圖解析這片XMLLINQ的簡單的XML片斷,以非匿名類型

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<DagUren> 
    <Chauffeur>Vincent</Chauffeur> 
    <AanmeldTijd>4 dec. 2012 09:05:42</AanmeldTijd> 
    <Gewerkt>04:42</Gewerkt> 
</DagUren> 

我創建了一個包含有Chauffer,AanmeldTijd,Gewerkt串的DagUren類等

 DagUren eenDagUren 
      = (from du in doc.Element("DagUren") 
       select new DagUren 
       { 
        Chauffeur = du.Element("Chauffeur").Value, 
        Gewerkt = du.Element("Gewerkt").Value, 
        Pauze = du.Element("Pauze").Value, 
        AanmeldTijd = du.Element("AanmeldTijd").Value, 
       } 
     ); 

編譯器響應:無法找到源類型「System.Xml.Linq.XElement」的查詢模式的實現。 '選擇'未找到。

請指點,我已經花了不少時間在上面重寫,每一個指南是使用了不同的方法......

回答

2

你的問題是,Element()不返回的XElement集合它只返回一個對象。 Linq只是查詢項目的集合,而不是單個對象。所以,你的解決方案是:

XElement du = doc.Element("DagUren"); 
DagUren ennDagUren = 
    new DagUren 
     { 
      Chauffeur = du.Element("Chauffeur").Value, 
      Gewerkt = du.Element("Gewerkt").Value, 
      Pauze = du.Element("Pauze").Value, 
      AanmeldTijd = du.Element("AanmeldTijd").Value 
     }; 
0

那是因爲SelectIEnumerable延期,但你選擇單個元素。請查詢上枚舉,並在年底申請SingleOrDefault

DagUren eenDagUren 
      = (from du in doc.Elements("DagUren") 
       select new DagUren 
       { 
        Chauffeur = du.Element("Chauffeur").Value, 
        Gewerkt = du.Element("Gewerkt").Value, 
        Pauze = du.Element("Pauze").Value, 
        AanmeldTijd = du.Element("AanmeldTijd").Value, 
       }).SinleOrDefault(); 

或者乾脆(因此你只有一個節點來解析,這是根目錄)。也可考慮使用節點鑄造,而不是閱讀Value性質:

XElement root = doc.Root; 
DagUren eenDagUren = new DagUren() { 
       Chauffeur = (string)root.Element("Chauffeur"), 
       Gewerkt = (TimeSpan)root.Element("Gewerkt"), 
       Pauze = (bool)root.Element("Pauze"), // e.g. 
       AanmeldTijd = (DateTime)root.Element("AanmeldTijd") }); 
+0

Wauw,那是快,謝謝:) – Harmen

+0

這兩個答案ADRESS的問題吧,我覺得最上面的一個是未來的遊客有點更清晰:) – Harmen