Как передать Linq в типы SQL в функцию - PullRequest
1 голос
/ 27 августа 2011

Приведенный ниже код используется в решении Linq to SQL и находится в событии Load формы.

Он отлично работает, чтобы отобразить упорядоченный список имен людей и установить для элемента значения значениеID человека.

Тем не менее, я собираюсь часто использовать эти списки «люди», поэтому я бы хотел добавить сабвуфер в мой код Utility, так как в событии Load формы есть только одна строка.

Я хочу вызвать что-то вроде: Call ComboboBoxPeople(cbo, tblTurnbackMain, ReportedByID)

Подпрограмма будет начинаться как: Public Sub ComboboxPeople(cbo as Combobox, tbl as 'sometype', fld as 'someothertype')

Что я могу использовать в качестве типов параметров для tbl иfld?

'-- cboReportedBy datasource
Dim LQ = (From p In TurnbackDC.vewPeopleAll, t In TurnbackDC.tblTurnbackMain
    Where p.PeopleID = t.ReportedByID
    Select p.Person, p.PeopleID).Distinct()

Dim LT = From x In LQ
    Order By x.Person
    Select x.Person, x.PeopleID

cboReportedBy.DataSource = LT
cboReportedBy.DisplayMember = "Person"
cboReportedBy.ValueMember = "PeopleID"

Спасибо!Dan

1 Ответ

0 голосов
/ 27 августа 2011

В вашем первом запросе LINQ вы определяете анонимный тип. Если вы хотите, вы можете поместить почти весь блок кода (LQ и LT) в один метод и вернуть LT. Поскольку LT содержит IEnumerable(Of T), а T является анонимным типом, вы можете позволить вашему методу просто возвращать IEnumerable следующим образом:

Public Shared Function GetAllPeople() As IEnumerable
   ' code here
End Function

Это будет работать в веб-формах ASP.NET, поскольку веб-формы используют отражение для загрузки данных из определяющих членов (Person и PeopleID). Тем не менее, этот подход немного хрупок, так как нет поддержки времени компиляции. Поэтому другой вариант - определить специальный Class (назовем его PersonDTO), который содержит два открытых свойства Person и PeopleID, и позволить этому методу возвращать IEnumerable(Of PersonDTO) или даже лучше массив PersonDTO объектов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...