LINQ.Сокращение кода с помощью динамических запросов - PullRequest
0 голосов
/ 03 июля 2011

Я использую следующий код для заполнения словаря 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

Ответы [ 2 ]

1 голос
/ 03 июля 2011

А как насчет метода расширения "ToDictionary ()"?

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

1 голос
/ 03 июля 2011

Я не знаю, правда ли это, но, похоже, это версия VB примера приложения MS c # SimpleLinqToDatabase.

Если это так, это сработает, если вы сделаете все типы моделей данных вашей строки таблицыодинаковые свойства TableID и Table.Затем получение данных таблицы с помощью универсального метода.Если вы не хотите, чтобы вам понадобилось изменить базовую модель, чтобы иметь метод доступа к свойствам в виде строки с отражением, но это не очень разумно и быстро сделать для модели данных.

    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

Затем вызовитеэто с:

Dim result as Dictionary(Of String, Integer)
result = FillTable(Of Table1)()
...