我正在处理每日股票市场数据的内存xml,并且其中一个日期的值为“8/221/19055”。我看到TryParse可能是检查有效日期的最佳选择,但MSDN doc似乎对第二个参数“out DateTime result”的解释很清楚。我如何在下面的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 new DailyPricingVolDP((string)s.Attribute("symbol"),
(DateTime)s.Element("LastTradeDate"),
(double)s.Element("Open"),
(double)s.Element("DaysHigh"),
(double)s.Element("DaysLow"),
(double)s.Element("LastTradePriceOnly"),
(long)s.Element("Volume"));
答案 0 :(得分:12)
Func<string, DateTime?> tryToGetDate =
value =>
{
DateTime dateValue;
return DateTime.TryParse(value, out dateValue) ? (DateTime?) dateValue : null;
};
var makeInfo =
from s in doc.Descendants("quote")
where s.Element("LastTradeDate") != null
&& s.Attribute("symbol") != null
let dateStr = s.Element("LastTradeDate").Value
let dateValue = tryToGetDate(dateStr)
where dateValue != null && (DateTime)dateValue == targetDate
select .... etc etc
答案 1 :(得分:3)
要消除out
的{{1}}参数,您可以在通用委托中抽象整个解析,例如标准TryParse
:
Converter<TInput, TOutput>
或者如果您需要使用Converter<string, DateTime> converter = (str) =>
{
DateTime dateTime;
if (!DateTime.TryParse(str, out dateTime))
{
// custom business logic for such cases
dateTime = DateTime.MinValue;
}
return dateTime;
};
传递更多参数,那么由您决定,实现(字符串到日期解析逻辑)也取决于您。
然后在查询中使用:
Func<string, string, DateTime>
答案 2 :(得分:1)
Datetime somedate;
if(DateTime.TryParse(datetotest, out somedate)
{
code for using date goes here
}
答案 3 :(得分:1)
它可以被重构为这样的东西,不需要函数和执行相同工作的更简单的查询:
var makeInfo = from s in doc.Descendants("quote")
where s.Attribute("symbol").HasValue
&& s.Element("LastTradeDate").HasValue
&& DateTime.Parse(Element("LastTradeDate").Value) == targetDate
select .... etc etc