2009-03-17 20 views
1

私はLINQを使用して2つのデータセットを結合しています。私はdtTable2から1フィールドだけを取得し、dtTable1からすべてのフィールドを取得しようとしています。このコードを実行すると、2つの列があります。最初の列にはdtTable2.field2の値が格納され、2番目の列には値 "System.Data.DataRow"が格納されます。 dtTable1の列を明示的に指定すると、必要な結果が得られることは知っています。 dtTable1からすべての列を取得するためにワイルドカードを指定することはできますか?LINQ - 2つのデータセットを結合する - ワイルドカード

Dim results = _ 
    From r In dtTable1.AsEnumerable _ 
    Join c In dtTable2.AsEnumerable _ 
    On c.Field1 Equals r.Field1 _ 
    Select c.field2, r 

Datagridview.datasource = results.ToList 

答えて

3

いいえ必要なプロパティを一覧表示するか、行オブジェクトのプロパティを参照する必要があります。これが厳密に型指定された行の場合は、型にキャストしてコード内で直接使用することができます。

Dim results = _ 
    From r In dtTable1.AsEnumerable _ 
    Join c In dtTable2.AsEnumerable _ 
    On c.Field1 Equals r.Field1 _ 
    Select c.field2, r.Field1, r.Field3, r.Field4 

Datagridview.datasource = results.ToList 
0

これはややこしいですが、ListオブジェクトとConcatを使用するとできます。私はあなたに正しい構文を与えるためにVBに慣れていませんが、ここにC#

var results = from r in dtTable1.AsEnumerable() 
       join c in dtTable2.AsEnumerable() on c.Field1 equals r.Field1 
       select new List<object>(r.ItemArray).Concat(new List<object>() { c.Field2 }) 
datagridview.DataSource = results;