2010-12-01 18 views
-1

Quelqu'un peut-il me dire comment S'il vous plaît spécifier la colonne particulière dans l'instruction select ci-dessous:et sélectionnez dans C# .net?

var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() 
        join dt2 in DsResults.Tables[1].AsEnumerable() 
        on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName") 
        select new { dt1, dt2 }; 

DataTable finaldt = new DataTable("FinalTable"); 
finaldt.Columns.Add(new DataColumn("sp", typeof(string))); 
finaldt.Columns.Add(new DataColumn("Method", typeof(string))); 
finaldt.Columns.Add(new DataColumn("Class", typeof(string))); 
finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string))); 
DataRow newrow = finaldt.NewRow();   
foreach (var row in combinedrows) 
{ 

    DataRow dataRow = finaldt.NewRow(); 
    dataRow.ItemArray = row.dt1.ItemArray; 

    finaldt.Rows.Add(dataRow); 
} 

Répondre

0

Eh bien, ce n'est pas vraiment clair ce que vous voulez, mais quelque chose comme ça, peut-être?

var combinedRows = from dt1 in DsResults.Tables[0].AsEnumerable() 
        join dt2 in DsResults.Tables[1].AsEnumerable() 
        on dt1.Field<string>("MethodName") 
        equals dt2.Field<string>("MethodName") 
        select new { MethodName = dt1.Field<string>("MethodName"), 
           Foo = dt2.Field<string>("Foo"), 
           Bar = dt1.Field<int>("Bar") }; 
0

Je ne sais pas ce que votre question est ... La requête LINQ est régulièrement jointure entre dsResults.Tables [0] et dsResults.Tables [1] en fonction du champ MethodName.

Qu'essayez-vous de faire?

+0

J'essaie de joindre deux datables dt1 et dt2.Mais l'ensemble de résultats ne doit contenir que les colonnes sélectionnées des deux datables. – Prem

1

Si vous souhaitez spécifier les colonnes que vous souhaitez sélectionner, vous devriez essayer de changer

combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() join 
dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field("MethodName") equals 
dt2.Field("MethodName") select new { dt1, dt2 }; 

dans

combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() join 
dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field("MethodName") equals 
dt2.Field("MethodName") select new 
{ 
    dt1.columnName; 
    dt2.columnName2; 
    dt2.columnName3; 
    etc. 
} 

Hope this ce que vous recherchez.

Vous pouvez jeter un oeil à la LinQ-CheatSheet

0

Il suffit de lire vos commentaires. Je pense que ce que vous voulez n'est pas une jointure, mais ce qui suit:

var combinedrows = 
    from dt1 in DsResults.Tables[0].AsEnumerable() 
    from dt2 in DsResults.Tables[1].AsEnumerable() 
    where dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName") 
    select new { dt1, dt2 }; 

Il renvoie des lignes ony des deux tables qui ont le même « NomMéthode ».

0

@Prem: Utilisez ce code pour qu'il fonctionne correctement, vérifiez-le.

var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() 
           join dt2 in DsResults.Tables[1].AsEnumerable() on  dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName") 
          select new { sp = dt1.Field<string>("Tab1_col1"), Method = dt1.Field<string>("MethodName"), _class = dt1.Field<string>("Class"), 
             BLLMethod = dt1.Field<string>("Tab2_col2") 
          }; 


     DataTable finaldt = new DataTable("FinalTable"); 
     finaldt.Columns.Add(new DataColumn("sp", typeof(string))); 
     finaldt.Columns.Add(new DataColumn("Method", typeof(string))); 
     finaldt.Columns.Add(new DataColumn("Class", typeof(string))); 
     finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string))); 
     DataRow newrow = finaldt.NewRow();   
     foreach (var row in combinedrows) 
     { 
      DataRow dr = finaldt.NewRow(); 
      dr["sp"] = row.sp; 
      dr["Method"] = row.Method; 
      dr["Class"] = row._class; 
      dr["BLLMethod"] = row.BLLMethod; 
      finaldt.Rows.Add(dr); 
     }