Ich verwende das Codebeispiel der Dynamic LINQ-Bibliothek, um einige Daten dynamisch zurückzugeben. Die Anzahl der zurückgegebenen Spalten hängt von den Benutzereingaben ab. Ich zähle das IQueryable in eine IList auf.
Ich muss nur ein Feld nach dem anderen durch die Liste führen. Ich kann eine Zeile nach der anderen erhalten, indem ich die Zeilen der IList durchlaufe, aber ich kann nicht für mein ganzes Leben ein Feld aus der Sammlung ziehen.
Zum Beispiel gebe ich hier zwei Spalten zurück (zum Testen fest codiert, aber in prod ist es variabel, abhängig davon, welche Felder der Benutzer auswählt):
Dim Dynq = dc.dt _
.Where("RUN_ID = """ & runNumber & """ and Upper_Pressure > 95") _
.OrderBy("Upper_Pressure") _
.Select(" new (Run_ID,Process)")
Dim something = DirectCast(Activator.CreateInstance(GetType(List(Of )).MakeGenericType(Dynq.ElementType), Dynq), IList)
Jetzt kann ich ein Feld aus der Ilist ziehen, wenn ich den Spaltennamen wie folgt kenne:
something.Run_ID.ToString
Die Spalten, die ich verwende, sind mir jedoch erst zur Laufzeit bekannt. Das dynamische Einfügen in eine zur Laufzeit festgelegte Variable funktioniert nicht.
Zusammenfassend habe ich also eine Ilist, die ungefähr so aussieht
1 | Auto
2 | Auto
3 | Manual
4 | Manual
und ich möchte eine Möglichkeit, 1 und dann Auto und dann 2 usw. zurückzugeben ...
Ich würde mich sehr über die Hilfe derjenigen freuen, die mehr gelernt haben als ich.
Ihre Frage ist etwas verwirrend, aber ich denke, Sie möchten Ihren Rückgabesatz reduzieren, um bestimmte Spalten als Elemente in der Reihenfolge nach Spalte und Zeile zurückzugeben ...
Eine Methode, die Sie verwenden können, ist der SelectMany- Operator.
Zum Beispiel (Entschuldigung in C #, da mein Gehirn einspurig wird!):
// Find flattened list of some explicitly specified property values...
var flattened = something.SelectMany(e => new [] { e.Run_ID.ToString(), e.Process.ToString() });
Ich bin mir nicht sicher, ob du danach suchst, aber es könnte ein Schritt in die richtige Richtung sein.