Ich habe eine Antwort von einer SOAP-Abfrage zurückgegeben, die nach dieser Bild hierarchische Daten mit jeder Zeile/Feld als Name/Wert-Objekte in einem Array hat: select-Anweisung für LINQ in Select
Ich zeige die erstes Feld 'sequennumb', aber es gibt viele Felder im Fields-Array.
Jetzt kann ich durch jedes dieser Fields-Array-Elemente iterieren, eine massive switch/case-Anweisung ausführen und das Objekt in etwas "flatten", das ich brauche. Aber ich fragte mich, ob es einen besseren Weg mit Linq gab.
Was ich haben will, ist so etwas wie diese:
while (response.Records != null)
{
var rows = from row in response.Records
from field in row.Fields
where field.Name == "status" && field.Value[0] != 'X'
select new {
seqnumb = from f in field where f.Name == "seqnumb" select f.Value
};
foreach (var row in rows)
{
}
// get new response..
}
Wenn ein Objekt mit dem Wert seqnumb = 3 (und vielen anderen Parametern von Array Fields) zurückgeführt wird.
Zur Zeit habe ich 'Zeile auswählen' als die letzte Anweisung in der Linq-Anweisung, die ich mit einem Schalter/Fall durchlaufen, die funktioniert, aber hat viel Code, und ich möchte mein Linq Verständnis zu verbessern.
danke fürs lesen.
So tun Sie mit Logik in den leeren Block in Ihrem Beispiel füllen wollen ein Objekt des Typs T für jede "Zeile" in "response.Records" zu erstellen, oder möchten Sie Ihre Deklaration von "Zeilen" durch einen Linq-Ausdruck ersetzen, der ein Iterable of Object vom Typ T erzeugt? So oder so, Sie müssen einen Konstruktor oder eine Fabrik für T verwenden. – Peter
Ich fragte mich, wie es in Linq wenn möglich alles zu tun. Derzeit mache ich eine foreach (Zeile in Zeilen) {foreach (Feld in Zeile.Felder) {}} Typ Iteration. – pgee70