2011-07-03 17 views
0

次のコードを使用して、LINQクエリ内の情報でTable1辞書を埋めます。LINQ。動的クエリを使用してコードを減らす

Dim DB As New DatabaseDataContext 
Dim Table1 As New Dictionary(Of String, Integer) 
Dim Table2 As New Dictionary(Of String, Integer) 

     Private Function FillTable() As Dictionary(Of String, Integer) 
      Table1.Clear() 
      Dim Query = From c In DB.Table1 Select New With _ 
            {.Table1ID = c.Table1ID, .Table1 = c.Table1} 
      For Each c In Query 
       Table1.Add(c.Table1, c.Table1ID) 
      Next 
      Return Table1 
     End Function 

任意のTableXXX辞書を埋めるために上記の関数にどのような変更を加える必要がありますか? Table2辞書を埋めるのに、以下の関数を使うのは嫌です。

 Private Function FillTable2() As Dictionary(Of String, Integer) 
      Table2.Clear() 
      Dim Query = From c In DB.Table2 Select New With _ 
            {.Table2ID = c.Table2ID, .Table2 = c.Table2} 
      For Each c In Query 
       Table2.Add(c.Table2, c.Table2ID) 
      Next 
      Return Table2 
     End Function 

答えて

1

何 "ToDictionary()" 拡張メソッドについて:

Private Function FillTable(Of T)() As Dictionary(Of String, Integer) 
     Dim dict as New Dictionary(Of String, Integer) 
     Dim Query = From c In DB.GetTable(Of T) Select New With _ 
           {.TableID = c.TableID, .Table = c.Table} 
     For Each c In Query 
      dict.Add(c.Table, c.TableID) 
     Next 
     Return dict 
    End Function 

その後でこれを呼びますか?

http://msdn.microsoft.com/en-us/library/bb549277.aspx

1

これが本当かどうかわかりませんが、これはMS c#SimpleLinqToDatabaseサンプルアプリケーションのVB版のようです。

もしそうなら、すべてのテーブル行データモデルタイプに同じプロパティTableIDとテーブルを設定すると機能します。その後、汎用メソッドを使用してテーブルデータを取得します。あなたが望んでいない場合は、ベースモデルを変更して、文字列でリフレクションを持つプロパティアクセサーを持たせる必要がありますが、データモデル上でそれほど巧妙でなく速く行う必要はありません。

Dim result as Dictionary(Of String, Integer) 
result = FillTable(Of Table1)() 
関連する問題