如何在xml数据的linq查询中使用TryParse?

我正在处理每日股票市场数据的内存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")); 

 Func 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 

要消除TryParse参数,您可以抽象generics委托中的整个解析,如标准Converter

 Converter converter = (str) => { DateTime dateTime; if (!DateTime.TryParse(str, out dateTime)) { // custom business logic for such cases dateTime = DateTime.MinValue; } return dateTime; }; 

或者如果您需要传递更多参数,请使用Func ,这取决于您,实现(字符串到日期解析逻辑)也取决于您。

然后在查询中使用:

 converter(rawString) == targetDate 
 Datetime somedate; if(DateTime.TryParse(datetotest, out somedate) { code for using date goes here } 

它可以重构为这样的东西,不需要函数和更简单的查询,它可以完成相同的工作:

 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