我正在使用C#中的xml文档,该文档具有多个(100+)点的股票市场数据。我想创建对象并将它们添加到List<>通过linq传递从xml文档检索的初始化值。目前我只能运行linq查询并返回一个xml字段,在下面的代码中,属性为“symbol”。我还想返回文档的“LastTradeDate,DaysLow,DaysHigh,LastTradePriceOnly,Open和Volume”。从那里,我的自定义构造函数是:StockDataPoint(Symbol,TradeDate,Open,High,Low,Close,Volume)。向正确的方向轻推会很棒。这是当前的linq:
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;
答案 0 :(得分:1)
您需要创建一个类:
select new YourClass {
Symbol = s.Attribute("symbol").Value,
...
}
答案 1 :(得分: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 ...
如果强制转换的目标是可空类型(可空值类型或引用类型),那么如果缺少该属性,则结果将是该类型的空值,这非常方便。