Dynamic LINQライブラリのコードサンプルを使用して、一部のデータを動的に返しています。返される列の数は、ユーザー入力によって異なります。 IQueryableをIListに列挙しています。
私がする必要があるのは、Ilistのフィールドを1つずつステップ実行することです。 IListの行を反復処理することにより、一度に1行を取得できますが、一生、コレクションから1つのフィールドをプルすることはできません。
たとえば、ここでは2つの列を返しています(テスト用にハードコードされていますが、実際にはユーザーが選択するフィールドに応じて可変になります)。
Dim Dynq = dc.dt _
.Where("RUN_ID = """ & runNumber & """ and Upper_Pressure > 95") _
.OrderBy("Upper_Pressure") _
.Select(" new (Run_ID,Process)")
Dim something = DirectCast(Activator.CreateInstance(GetType(List(Of )).MakeGenericType(Dynq.ElementType), Dynq), IList)
次のような列名がわかっている場合は、Ilistからフィールドを取り出すことができます。
something.Run_ID.ToString
しかし、実行時まで使用している列がわかりません。実行時に設定された変数に動的に挿入しても機能しません。
要約すると、私はこのようなIlistを持っています
1 | Auto
2 | Auto
3 | Manual
4 | Manual
そして、私は1を返し、次にAutoを返し、次に2などを返す方法が欲しいのですが...
これより私より多くのことを学んだ人たちの助けに大いに感謝します。
あなたの質問は少しわかりにくいですが、特定の列を要素として列ごと、行ごとに返すように、リターンセットをフラット化したいと思います...
使用できる1つの方法は、 SelectMany演算子です。
たとえば(私の頭脳が1トラックになっているため、C#では申し訳ありません!):
// Find flattened list of some explicitly specified property values...
var flattened = something.SelectMany(e => new [] { e.Run_ID.ToString(), e.Process.ToString() });
それがあなたの望みかどうかはわかりませんが、正しい方向への一歩かもしれません。