ユーザーがさまざまなデータ ソースを予測不可能な列スキーマにマップするオプションを持つプログラムがあります。そのため、10 個のフィールドを持つ SQL Server データベースまたは 20 個の Excel ファイルを持つ可能性があります。名前は何でもかまいませんし、フィールドのデータ型はテキストと数値、日付などの混合にすることができます。
次に、ユーザーは各フィールドの意味のマッピングを提供する必要があります。したがって、列 4 は「LocName」、列 2 は「LocX」、列 1 は「LocDate」などです。マップ先のオプションとしてユーザーに提示される名前とデータ型は、DataSet DataTable ( XSD xchema ファイル)。
たとえば、ソースに次のような形式のデータが含まれている場合:
User Column 1: "LocationDate" of type string
User Column 2: "XCoord" of type string
User Column 3: "YCoord" of type string
User Column 4: "LocationName" of type int
ユーザーは、アプリケーションが必要とする DataTableに対してこれに変換する必要があるマッピングを提供します。
Application Column "LocName" of type string = Column **4** of user table
Application Column "LocX" of type double = Column **2** of user table
Application Column "LocY" of type double = Column **3** of user table
Application Column "LocDate" of type datetime = Column **1** of user table
ソースに接続し、ユーザー クエリのデータを「生の」形式で DataTable として引き出すルーチンがあるため、ソースのスキーマを使用します。
私の質問は、データを生の DataTable から必要なアプリケーションの DataTable に「変換」する最良の方法は何ですか?
foreach は明らかに機能しますが、各行のすべてのループでデータ型を考慮する必要があるため、力ずくのように思えます。LINQまたはADO.NETでそれを行う「巧妙な」方法はありますか?