2010-12-01 33 views
-1

誰能請告訴我如何指定select語句下面給出的特定列:從和選擇在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); 
} 

回答

0

嗯,這是不是真的清楚自己想要什麼,但這樣的事情,也許?

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

不知道你的問題是什麼... LINQ查詢是基於該方法名外地dsResults.Tables [0]和dsResults.Tables [1]之間的常規連接。

你想做什麼?

+0

我嘗試連接兩個數據表dt1和dt2.But結果集必須只包含來自兩個數據表的選定列。 – Prem 2010-12-01 08:24:47

1

如果要指定要選擇哪些列,你應該嘗試改變

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

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

希望這是你所期待的。

你可以看看LinQ-CheatSheet

0

剛剛看了你的評論。我想你想要的是不是加入,但以下幾點:

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

它具有相同的「方法名」兩表返回ONY行。

0

@Prem:使用此代碼其工作正常,檢查出來。

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