2009-08-11 8 views
0

Je veux créer une jointure entre deux tables et que le résultat inclura toutes les colonnes des deux tables. Je veux le faire sans spécifier les noms de colonnes spécifiques, il suffit de sélectionner tout, car je ne saurai pas combien de colonnes les deux tables incluront et ne connaîtront pas leur nom. Je veux juste créer une jointure entre deux tables et que le résultat inclura les deux colonnes de la table.joindre entre deux tables avec linq aux ensembles de données

Comment faire cela? quel est le type de résultat devrait être?

i essayé:

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 }; 

mais je reçois un type étrange comme résultat que je ne peux rien faire avec, je ne peux pas le convertir en dataTable, ou Dataset présenter dans gridview.

Par exemple, obtenir une table avec les colonnes [Trid], [SP], [SP2] sans créer specificly un type anonyme avec ces trois colonnes:

Tableau 1 TrID SP Asaf1 Asaf2 F1 K2 Asaf1 D2 H1 F1

Table2
TrID SP2 Asaf1 Dor2 Asaf1 U1 R1 W1

I1 Y3

Répondre

0

Il n'y a aucun moyen de fusionner par magie vos deux tables. Si vous voulez un nouveau DataTable, vous devez en créer un nouveau avec les colonnes appropriées et ajouter des lignes en conséquence. Vous pouvez également lier un type anonyme à un contrôle, mais pas avec votre type anonyme actuel de deux propriétés DataRow. , Vous aurez besoin au lieu d'extraire les champs que vous souhaitez:

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") 
       }; 

vous pouvez définir res comme source de données et se lient à TrID, SP et SP2.

Questions connexes