2012-01-22 19 views
1

私は複数の(100+)株式市場データを持つC#のXML文書を扱っています。私は、オブジェクトを作成し、それらをリスト<に追加するために、XML文書からlinq経由で取得した初期値を渡したいと思います。現時点では、私はちょうどlinqクエリを実行し、xmlフィールドの1つを、以下のコードで、属性 "シンボル"を返すことができます。また、ドキュメントの「LastTradeDate、DaysLow、DaysHigh、LastTradePriceOnly、Open、およびVolume」を返すこともできます。そこから、私のカスタムコンストラクタは:StockDataPoint(Symbol、TradeDate、Open、High、Low、Close、Volume)です。正しい方向への動きはすばらしいでしょう。ここでは、現在のLINQです:linqで複数のXML要素/属性を返すにはどうすればいいですか?

var makeInfo = 
     from s in doc.Descendants("quote") 
     where s.Element("LastTradeDate") != null 
     && s.Attribute("symbol") != null 
     let dateStr = s.Element("LastTradeDate").Value 
     where !string.IsNullOrEmpty(dateStr) 
     && DateTime.Parse(dateStr, enUS) == targetDate 
     select s.Attribute("symbol").Value; 

答えて

1

まあ、それはあなたのXMLフォーマットに依存しますが、あなただけのようなものをお勧めします:

... 
select new StockDataPoint((string) s.Attribute("symbol"), 
          (DateTime) s.Attribute("TradeDate"), 
          (decimal) s.Attribute("Open"), 
          (decimal) s.Attribute("High"), 
          (decimal) s.Attribute("Low"), 
          (decimal) s.Attribute("Close"), 
          (long) s.Attribute("Volume")); 

注意をXAttributeの明示的な演算子を使用することで、解析を自分で行うのを避けることができます。確かに、あなたもあなたのクエリでは、この以前を使用することができます。

var makeInfo = from s in doc.Descendants("quote") 
       where s.Attribute("symbol") && 
        (DateTime?) s.Attribute("LastTradeDate") == targetDate 
       select ... 

をキャストのターゲットがNULL可能タイプ(NULL可能値型または参照型のいずれか)の場合、属性が欠落している場合、結果は意志その型のnull値になります。これはとても便利です。

+0

ジョン、ありがとう。私はチャッターを最小限に抑えることを知っていますが、先週あなたの本を手に入れました。 :) – StatsViaCsh

+0

@StatsViaCsh:Goodo - あなたがそれを楽しむことを願って:) –

1

あなたはクラスを作成する必要があります。

select new YourClass { 
    Symbol = s.Attribute("symbol").Value, 
    ... 
} 
+0

スラックをありがとう、私はそれを概念的に見て、後ろから明白でした。 – StatsViaCsh

関連する問題