Veröffentlicht 26. Mai 201015 j Hi, vielleicht kann mir jemand helfen...? Ich habe folgendes Problem: Ich beziehe Daten aus einer Datenbank, die mir als XML-Resultset zurückgegeben werden. Diese lege ich in einem XDocument ab. Nun wollte ich gerne mittels LINQ die einzelnen Resultsets in einzelne Objekte packen und habe folgende Schwierigkeit: var Daten = from item in result select new (Bla=item.Element("Bla").value); So in etwa sieht meine Abfrage aus. Allerdings kann es sein, daß die Zuweisung insgesamt NULL ergibt, weil ein Item nicht jedesmal vorhanden ist. Weiß einer eine Möglichkeit, wie ich das new {} gestalten könnte, daß er entweder wenn Element vorhanden den value nimmt oder, wenn element nicht vorhanden einfach string.empty? Das in einen Haufen try-catch-Blöcke zu schreiben finde ich unelegant, ist aber bisher meine einzige Lösung. item.Element("Bla").value löst ja schon eine Exception aus... wenn's nur null nehmen würde, statt der Exception wär mir ja schon geholfen. Danke im voraus.
26. Mai 201015 j bla = item == null ? String.Empty : (string) item.Element("Bla").value Sofern nur item null sein kann. falls value schon nen String zurückgibt kannst du den cast logischerweise auch sein lassen. Hab das jetzt mal so aus dem Stehgreif geschrieben.
26. Mai 201015 j Autor Hm, danke! Aber das löst das Prinzip leider nicht. Die Schwierigkeit besteht darin, daß das Resultset <result> <Bla>"Blah"</Bla> </result> Mal <Bla> enthält und mal nicht. Und es ist auch klar, daß der Zugriff auf item.Element("Bla").value eine Exception auslöst, wenn's das Tag nicht gibt. Ich bräuchte sowas wie eine "Exist"-Funktion oder so. Dann könnte ich das einfach mit in meine Abfrage (mittels anonymer Funktion) einbauen. *grübel* Vielleicht hat ja noch jemand eine Idee ... :]
27. Mai 201015 j Autor Falls nochjemand auf so ein Problem stoßen sollte: Ich bin ja auch doof *ankopphau* Wenn ich den Selectbefehl lediglich auf das Element mache und nicht auf seinen Inhalt, bekomme ich auch ordentlicherweise null zurück.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.