I\'m working with in memory xml of daily stock market data, and I\'m getting the value \"8/221/19055\" for one of the dates. I see that TryParse is likely my best bet to che
Datetime somedate;
if(DateTime.TryParse(datetotest, out somedate)
{
code for using date goes here
}
It could be refactored to something like this with no need for functions and a simpler query which does the same job:
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
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
To eliminate out
parameter of TryParse
you can abstract entire parsing in the generic delegate like standard 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;
};
or in case you need passing in more parameters use Func<string, string, DateTime>
, it is up to you, implementation (string to date parsing logic) is up to you as well.
Then use in the query:
converter(rawString) == targetDate