以下代码用于Linq to SQL解决方案,并且位于表单的Load事件中。
可以正常显示人名的有序列表,并将值成员设置为该人的ID。
但是,我将使用这些'人'组合框很多,所以我想在我的实用程序代码中添加一个子代码,在表单的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"
谢谢! 丹
答案 0 :(得分:0)
在第一个LINQ查询中,您正在定义匿名类型。如果您愿意,您可以将几乎整个代码块(LQ
和LT
)放在一个方法中并返回LT。由于LT
包含IEnumerable(Of T)
且T
为匿名类型,因此您可以让方法只返回IEnumerable
,如下所示:
Public Shared Function GetAllPeople() As IEnumerable
' code here
End Function
这将在ASP.NET Web窗体中起作用,因为Web窗体使用反射来加载来自定义(Person
和PeopleID
)的成员的数据。但是,这种方法有点脆弱,因为没有编译时支持。因此,另一个选项是定义一个包含两个公共属性Class
和PersonDTO
的特殊Person
(我们称之为PeopleID
),并让该方法返回IEnumerable(Of PersonDTO)
甚至更好的PersonDTO
个对象数组。