2

この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'のクエリパターンの実装が見つかりませんでした。「選択」が見つかりません。

アドバイスしてください、私はそれを書き直すことにかなりの時間を費やしました、すべてのガイドは異なるアプローチを使用しています...

4

2 に答える 2

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
        };
于 2012-12-05T10:18:03.917 に答える
0

これSelectは、がの拡張であるためIEnumerableですが、単一の要素を選択しています。列挙可能でクエリを作成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();

または単に(したがって、解析するノードは1つだけで、ルートです)。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") });
于 2012-12-05T10:16:14.593 に答える