XML to LINQ with Checking Null Elements

后端 未结 3 1232
不知归路
不知归路 2021-01-13 16:21

The situation I am faced with is parsing an XML document into an object using Linq. During the parse I am checking to make sure Elements are not null before proceeding to p

相关标签:
3条回答
  • 2021-01-13 16:35

    In C# 6.0 you can use monadic Null-conditional operator ?. After applying it in your example it would look like this:

    var variable = (from x in xdoc.Descendants("Root")
                    select new
                    {
                        NetCharge = x.Element("Charges")?.Element("NetCharge")?.Value ?? "0",
                        TotalCharge = x.Element("Charges")?.Element("TotalCharge")?.Value ?? "0"
                    }).SingleOrDefault();
    

    You can read more here in part titled Null-conditional operators.

    0 讨论(0)
  • 2021-01-13 16:43

    You can replace

    x.Element("nodeName") != null : int.Parse(x.Element("nodeName").Value) : 0
    

    with

    (int)x.Element("nodeName")
    

    It works for string, int, double, decimal, bool, uint, DateTime and Nullable of those as well.

    0 讨论(0)
  • 2021-01-13 16:47

    One simple option is to use Elements rather than Element - that will return a zero-length sequence if the element isn't present. So you can use:

    from x in xdoc.Descendants("Root")
    select new AccountingResponse
    {      
        NetCharge = x.Elements("Charges")
                     .Elements("NetCharge")
                     .Select(y => (int) y)
                     .FirstOrDefault(),
        TotalCharge = x.Elements("Charges")
                       .Elements("TotalCharge")
                       .Select(y => (int) y)
                       .FirstOrDefault(),
    }).SingleOrDefault();
    

    (Note that your original code wouldn't compile, as Value is a string whereas 0 is an int...)

    0 讨论(0)
提交回复
热议问题