Verwendung einer LINQ-Abfrage zum Abrufen von XElement-Werten, wenn XE-Elemente denselben Namen haben

8

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:

%Vor%     
JohnC 20.05.2009, 21:19
quelle

10 Antworten

8

Würde so etwas helfen?

%Vor%     
Richard Morgan 21.05.2009 21:25
quelle
3

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.

    
dss539 21.05.2009 21:57
quelle
1

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.

    
user166390 10.11.2010 05:57
quelle
1

Vielleicht das?

%Vor%     
R.Silva 12.11.2013 18:18
quelle
0

Sie können Aufrufe an Elements() verketten:

%Vor%

Sie können auch Descendants() :

verwenden %Vor%

Dies wird jedoch alle & lt; Feld & gt; Elemente unter & lt; Table & gt ;, auch wenn sie nicht innerhalb eines & lt; Record & gt; Element.

    
Bojan Resnik 21.05.2009 07:24
quelle
0

Sie benötigen einen zweistufigen Prozess:

Beschriften Sie die Datensätze (anstelle von Attributen) und dann Zählen Sie die Felder auf und übergeben Sie die Werte zur Bindung an eine anonyme Klasse, beispielsweise:

%Vor%     
Pita.O 21.05.2009 22:24
quelle
0

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"

    
Alexander Kahoun 21.05.2009 22:01
quelle
0

Ä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.

    
BenAlabaster 21.05.2009 22:50
quelle
0

Würde ein

%Vor%

arbeiten? (Ich bin mir nicht sicher, wie ich das inline anzeigen lassen kann)

%Vor%

Weiß nicht, ob das für Ihr spezifisches Szenario funktioniert oder nicht.

    
Jonas 21.05.2009 23:00
quelle
0

var detail1 = von d in ds.tbl_Looking_Fors                              wo d.Profile_ID == id                              Wählen Sie d.Looking_For;

%Vor%     
Maulik Patel 13.04.2010 19:26
quelle

Tags und Links