2011-07-07 11 views
1

Q:は、データテーブル2に参加し、他のデータテーブルに結果を返す

私は2つのデータテーブルを持っていると私はインナーにしたいが参加し、LINQを介して、他のDataTableの結果を返します。

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)が代わりにDataTableの、あなたが作成した匿名型の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

ありがとうございます。しかし、私は 'collection'が空で、' inner'が結果を返すのを発見したときにトレースします。 –

関連する問題