OK, bit of a random question, but the best way to do this is to just add the code, you'll be able to see what I mean straight away:
XML:
<?xml version="1.0" encoding="utf-8" ?>
<customers>
<customer>
<id>1</id>
<name>Blah-face</name>
<Type>1</Type>
</customer>
<customer>
<id>2</id>
<name>Blah-face-2</name>
<Type>2</Type>
</customer>
<customer>
<id>3</id>
<name>Blah-face-3</name>
<Type>1</Type>
<SuperType>1</SuperType>
</customer>
</customers>
C#:
XDocument linquee = XDocument.Load(path);
var superType = (from c in linquee.Descendants("customer")
where (c.Element("SuperType").Value == "1")
select c).ToList();
This comes up with a null error - would I need to add the "SuperType" element to each customer before it with a null value, or is there a workaround that would mean I don't have to do that?
Cheers!
Try this:
var superType = (from c in from c in linquee.Descendants("customer")
where (string) c.Element("SuperType") == "1"
select c).ToList();
Basically if you cast a null XElement
reference to string
, you'll get a null reference (which you can compare with "1").
An alternative would be to cast to int?
which (IIRC) will return a null int?
value if the element is missing, but go bang if it's present but non-numeric:
var superType = (from c in from c in linquee.Descendants("customer")
where (int?) c.Element("SuperType") == 1
select c).ToList();
You should be able to just add a check for null
where c.Element("SuperType") != null
&& [your other criteria]
Have you tried checking if the SuperType
element exists before trying to read the value from it?
...
where (c.Element("SuperType") != null && c.Element("SuperType").Value == "1")
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With