Den kan løses på forskellige måder, den første og den nemmeste, en Func
Altså: Func<XElement, string> CheckForValue = x => x != null ? x.Value : null;
var res = from userNumber in xdoc.Elements() select new { User = userNumber.Element("userNumber"), Group = CheckForValue(userNumber.Element("groupNumber")) };
Eller den som jeg bedre kan li :), hvor du smidee en extension på XElement sådan at du automatisk for genereret default elementet hvis dette mangler:
Func<XElement, string> CheckForValue = x => x != null ? x.Value : null;
var res = from userNumber in xdoc.Elements() select new { User = userNumber.Element("userNumber"), Group = CheckForValue(userNumber.Element("groupNumber")), GroupAlternative = userNumber.Element("groupNumber").ValueOrDefault("GroupAlternative") };
og extensionen: public static class Extensions { public static XElement ValueOrDefault(this XElement element, XName name) { if (element != null) return new XElement(name, element.Value); else return new XElement(name); } }
Jeg har behov for at få en where condition ind i min linq kode:
XDocument xdoc = XDocument.Load(@filepath); try { var res = from userNumber in xdoc.Descendants("basicModule") where userNumber.Element("userNumber").ToString() == "1234" select new { USERNUMBER = userNumber.Element("userNumber").Value, GROUPNUMBER = CheckForValue(userNumber.Element("groupNumber")), };
Det kompilerer ok, men der returneres ingen data, selv om der i xml dokumentet er et userNumber med 1234 i ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.