2016-04-05 23 views
0

2つのデータテーブルを結合し、結合テーブルからいくつかの列(動的に選択される)を取得する必要があります。 LINQクエリを使用して結合を実行しましたが、列の列を動的に選択できませんでした。ここLINQの動的選択クエリ

var q = (from pd in tableOne.AsEnumerable() 
       join od in tableTwo.AsEnumerable() on pd.Field<string>(leftTableColumn) equals od.Field<string>(rightTableColumn) 
       select new 
       { 
        Column1=pd.Field<dynamic>(reuiredColumn1), 
        Column2=od.Field<dynamic>(requireColumn2) 

       }); 

tableOneとtableTwoは、データテーブルです:

コードがあります。ここでの問題は、私は常に2つの列(column1、column2)query.But私は、選択クエリを動的にユーザーの選択に基づいて形成する必要があるとして取得することができます。

誰でもこの結果を達成するための考え方を共有できますか?

+0

あなたの質問はあまり明確ではありません –

答えて

0

達成しようとしていることは何ですか?可変のユーザー定義列を持つデータグリッド?これはEntity Frameworkですか、Linq-to-SQLですか?

簡単バージョン

  • 列の何百ものがない場合、私はすべての列をロードし、私はGUIに表示するだけで列を非表示にしたいです。

ハードバージョン

  • あなたが本当にDBからわずか数の列をロードする必要がある場合。拡張メソッドのバージョンLINQ(つまりtableOne.Select(lambda expression))を使用し、Anonymous type as an expression dynamicallyを作成することをおすすめします。
+0

OPは 'DataTable'sと[DataTableExtensions.AsEnumerable]を使用しています(https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable(v = vs.110).aspx) –

+0

ありがとうございました。私はAsEnumerableメソッドについての部分を削除します。 –

0

私は正しく理解しています。一度メインテーブルを選択してから、条件に基づいて必要な列を選択することができます。ここでテストされていないコード

var q = (from pd in tableOne 
       join od in tableTwo on pd.Field equals od.Field 
       select new 
       { 
        pd, 
        od 
       }); 

if(somecondition) 
{ 
    var q1 = from result in q 
     select q.pd.yourcoloumns; 
} 
else 
{ 
    var q1 = from result in q 
      select q.od.yourcoloumns; 
} 

pdodがあなたのテーブルで私の例です。

+0

あなたのコードで、同じクエリで複数の列を選択するにはどうすればいいですか(var q1 = from結果q q.pd.yourcoloumns;を選択してください)私はこのように使用しています。var q1 =結果from q select q.Select(i => i.pd [reuiredColumn1]); ...一度に1つの列しか取得できません。 –

+0

をカンマで区切って 'q.Select(i => i.pd.Coloumns1、i.pd.coloumn2)' 'pd'または' od'の後に '.'を付ける –