2011-07-07 60 views
1

問:連接兩個數據表,並在另一個數據表中返回的結果

我有兩個數據表,我想給內參加並通過LINQ在一個又一個數據表返回結果。

DataTable dt1 = StaffCVDAL.getCourses(int.Parse(Session["emp_num"].ToString())); 
DataTable dt2 = cc1lectcrsfilesDAL.ListFiles(int.Parse(Session["emp_num"].ToString()), int.Parse(Session["permission_code"].ToString())); 
DataTable dt = from t1 in dt1.AsEnumerable() 
       join t2 in dt2.AsEnumerable() 
         on t1["crsnum"] equals t2["crsnum"] 
       select new { t1["crsname"],t2["group"] }; //the problem is here . 
+1

是否有明確的需求,結果應該是一個'DataTable'? LINQ返回一個你創建的匿名類型的IEnumerable。 – SWeko

+0

是的我需要一個'datatable'的結果,這就是問題所在。 –

+1

你爲什麼不能使用sql視圖的任何原因? –

回答

3

的問題是,所述查詢表達式(LINQ)返回所創建的匿名類型的IEnumerable,代替DataTable。恕我直言,我喜歡與收藏,而不是數據表的工作,但如果你想有一個DataTable,你可以創建和自己從集合填充它,像這樣:

var collection = from t1 in dt1.AsEnumerable() 
       join t2 in dt2.AsEnumerable() 
        on t1["crsnum"] equals t2["crsnum"] 
       select new { Name = t1["crsname"], Group = t2["group"] }; 
DataTable result = new DataTable("NameGroups"); 
result.Columns.Add("crsname", typeof(string)); 
result.Columns.Add("group", typeof(int)); 

foreach (var item in collection) 
{ 
    result.Rows.Add(item.Name, item.Group); 
} 

更多細節,以及更通用的解決方案,看看this

+0

'select new {t1 [「crsname」],t2 [「group」]}'這部分產生編譯錯誤--->'無效的匿名類型成員聲明符'。 –

+1

當然它:)。可憐的C#不能確定字段的名稱應該是什麼。將編輯答案。 – SWeko

+0

非常感謝,但是當我追蹤我發現'集合'是空的,而'內部'產生結果! –

相關問題