2009-08-11 9 views
0

Ich möchte eine Verknüpfung zwischen zwei Tabellen erstellen und das Ergebnis wird alle zwei Tabellen Spalten enthalten. Ich möchte dies tun, ohne die spezifischen Spaltennamen anzugeben, wählen Sie einfach alle aus, weil ich nicht weiß, wie viele Spalten die beiden Tabellen enthalten und ihre Namen nicht kennen.Join zwischen zwei Tabellen mit Linq zu Datasets

ICH WILL JEWEILS ZWISCHEN ZWEI TABELLEN ERSTELLEN UND DASS DAS ERGEBNIS DIE BEIDEN TAFELSÄULEN ENTHÄLT.

Wie mache ich das? Was sollte der Ergebnistyp sein?

Ich habe versucht:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable() 
      join 
      t2 in ds1.Tables["Table2"].AsEnumerable() 
      on t1.Field<string>("TrID") equals t2.Field<string>("TrID") 
       select new { t1, t2 }; 

aber ich eine seltsame Art als Ergebnis bekommen, dass ich nicht mit irgendetwas tun kann, ich es zu Datatable, Dataset nicht umwandeln kann oder es in gridview präsentieren.

Zum Beispiel erhalten eine Tabelle mit den Spalten [TrID], [SP], [SP2] ohne specificly einen anonymen Typ mit diesen drei Spalten erstellen:

Table1 TrID SP Asaf1 Asaf2 F1 K2 Asaf1 D2 H1 F1

Table2
TrID SP2 Asaf1 Dor2 Asaf1 U1 R1 W1 I1 Y3

Antwort

0

Es gibt keine Möglichkeit, Ihre beiden Tabellen magisch zusammenzuführen. Wenn Sie eine neue DataTable möchten, müssen Sie eine neue mit den entsprechenden Spalten erstellen und Zeilen entsprechend hinzufügen. Alternativ können Sie einen anonymen Typ tatsächlich an ein Steuerelement binden, jedoch nicht an Ihren aktuellen anonymen Typ von zwei DataRow-Eigenschaften. Stattdessen müssen Sie die Felder extrahieren Sie wollen:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable() 
      let id = t1.Field<string>("TrID") 
      join t2 in ds1.Tables["Table2"].AsEnumerable() 
      on id equals t2.Field<string>("TrID") 
       select new { 
        TrID = id, 
        SP = t1.Field<string>("SP"), 
        SP2 = t2.Field<string>("SP2") 
       }; 

Dann können Sie res als Datenquelle und binden an TrID, SP und SP2 gesetzt.