Linq To SQL DAL и источник данных поиска - PullRequest
2 голосов
/ 05 июня 2009

Я изучаю linq to sql и пытаюсь настроить поле со списком поиска на моей веб-странице. Я использовал источник данных linq, но затем переместил свой код linqtosql в его собственную библиотеку классов для моей библиотеки DAL (вынут из папки app_code). Итак, я конвертирую код страницы, чтобы теперь иметь возможность поиска, управляемого объектом biz.

Вот что я сделал на своем бизнес-слое ...

Public Class KosherTypes

    Public Shared Function GetKosherTypes() As List(Of KosherTypeLookup)
        Dim db As New DBDataContext

        Dim types = From kt In db.KosherTypes _
                    Where kt.IsDeleted = False _
                    Order By kt.Name _
                    Select New KosherTypeLookup With {.Name = kt.Name, .ID = kt.KosherTypeID}

        Return types.ToList

    End Function

End Class

Затем я настроил источник данных объекта и сопоставил его с этим классом.

У меня есть несколько вопросов, потому что, когда я проводил поиск в Интернете, я не нашел никого, кто, кажется, делал бы это, и все же я знаю, что справочные таблицы / комбинированные окна являются общими ...

  1. Я просто что-то пропустил, и есть лучший способ сделать это?

  2. Я пошел с возвратом списка, но мог бы вернуть IEnumerable или IQueryable. В моем чтении мне показалось, что IQueryable обладает большей функциональностью для linq to sql, но так как я возвращаю простой список из двух столбцов, мне нужно только вернуть IEnumerable или List. Я пошел со списком, так как он строго напечатан. Я принял правильное решение? АКА - Должен ли я только что вернуться и IEnumerable или, возможно, ушел с IQueryable?

Спасибо!

1 Ответ

1 голос
/ 05 июня 2009

Я отвечу в обратном порядке:

  1. Я бы не использовал IQueryable вне ваших репозитариев / DAL по той простой причине, что, поскольку выполнение откладывается, вы теряете контроль над тем, что именно выполняется (т. Е. Функция aribtrary может быть назначена в качестве делегата для WHERE), делая обслуживание и тестирование намного сложнее. Я не вижу проблемы с возвратом IEnumberable (Of KosherTypeLookup).
  2. Если поиск является статическим поиском, который никогда не изменяется или редко изменяется, вы можете захотеть найти способ кэширования поиска после первого использования, чтобы избежать попадания в db при каждом вызове этого блока. Это действительно зависит от вашей ожидаемой нагрузки, хотя. Как всегда, тестирование производительности / нагрузки покажет, где вам нужно оптимизировать.
...