How to I use TryParse in a linq query of xml data?

后端 未结 4 1983
甜味超标
甜味超标 2020-12-15 10:21

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

相关标签:
4条回答
  • 2020-12-15 10:31
    Datetime somedate;
    
    if(DateTime.TryParse(datetotest, out somedate)
    {
    
         code for using date goes here
    
    }
    
    0 讨论(0)
  • 2020-12-15 10:47

    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
    
    0 讨论(0)
  • 2020-12-15 10:50
    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
    
    0 讨论(0)
  • 2020-12-15 10:55

    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
    
    0 讨论(0)
提交回复
热议问题