Ich habe ein Stück xml wie folgt:
%Vor%Was ich möchte, ist eine LINQ-Abfrage, die ein IEnumerable generiert, das ich als Datenquelle eines DataGrid zuweisen kann. Was ich bisher habe, ist wie folgt:
%Vor%Die Tatsache, dass ich mehrere Feldelemente haben kann, ist mein Stolperstein.
Im obigen Beispiel brauche ich etwas wie IEnumerable<string,string>
.
Das Datagrid würde ungefähr so aussehen:
Es klingt so, als ob Sie das Feld denormalisieren möchten, damit es in 1 Spalte Ihres Datenrasters passt.
Hilft die folgende?
%Vor%Disclaimer: Ich mache nicht mehr viel SQL oder LINQ, also könnte das wahrscheinlich besser gemacht werden. Fühlen Sie sich frei, es zu ändern.
Ich verstehe nicht, was das Problem ist und warum einige dieser Antworten so kompliziert aussehen: - / Hier ist mein Angebot:
%Vor% Der innere IEnumerable ist für die Spalten und der äußere für die Zeilen. (Die Frage ist etwas verwirrend, weil es kein IEnumerable<T,T'>
gibt, das obige ist meine Anpassung der Absicht.)
Sie könnten das innere IEnumerable in eine Zeichenfolge (z. B. Join on ",") einfügen, aber es macht nicht viel Spaß, es in ein Gitter einzufügen, wenn Sie die Werte als Spalten meinen!
%Vor%Das obige könnte wahrscheinlich schöner gemacht werden, wenn ich LINQ Expressions wirklich kenne. Es funktioniert jedoch und deckt den "anderen" Fall ab - der "ToArray" ist für .NET 3.5 und niedriger.
Sie können Aufrufe an Elements()
verketten:
Sie können auch Descendants()
:
Dies wird jedoch alle & lt; Feld & gt; Elemente unter & lt; Table & gt ;, auch wenn sie nicht innerhalb eines & lt; Record & gt; Element.
Ich bin vielleicht weit weg von dem, wonach du suchst, aber suchst du nach so etwas?
%Vor% Geben Sie dann ds
zurück und setzen Sie DataMember
auf "Records"
Äh ... Ich denke, Sie verwenden das falsche LINQ-Paradigma für dieses Problem. Sie sollten LINQ to XML verwenden, was etwas anders ist, als Sie erwarten.
Sehen Sie sich diesen Link an:
Es erklärt es mit einem strukturell ähnlichen Beispiel zu dem, das Sie vorgestellt haben.
var detail1 = von d in ds.tbl_Looking_Fors wo d.Profile_ID == id Wählen Sie d.Looking_For;
%Vor%Tags und Links c# linq-to-xml