如何将Linq to SQL类型传递给函数

时间:2011-08-27 15:48:31

标签: .net vb.net linq-to-sql function parameters

以下代码用于Linq to SQL解决方案,并且位于表单的Load事件中。

可以正常显示人名的有序列表,并将值成员设置为该人的ID。

但是,我将使用这些'人'组合框很多,所以我想在我的实用程序代码中添加一个子代码,在表单的Load事件中只有一行。

我想打电话给:Call ComboboBoxPeople(cbo, tblTurnbackMain, ReportedByID)

子开头就像:Public Sub ComboboxPeople(cbo as Combobox, tbl as 'sometype', fld as 'someothertype')

我可以将哪些内容用作tblfld的参数类型?

'-- 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"

谢谢! 丹

1 个答案:

答案 0 :(得分:0)

在第一个LINQ查询中,您正在定义匿名类型。如果您愿意,您可以将几乎整个代码块(LQLT)放在一个方法中并返回LT。由于LT包含IEnumerable(Of T)T为匿名类型,因此您可以让方法只返回IEnumerable,如下所示:

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

这将在ASP.NET Web窗体中起作用,因为Web窗体使用反射来加载来自定义(PersonPeopleID)的成员的数据。但是,这种方法有点脆弱,因为没有编译时支持。因此,另一个选项是定义一个包含两个公共属性ClassPersonDTO的特殊Person(我们称之为PeopleID),并让该方法返回IEnumerable(Of PersonDTO)甚至更好的PersonDTO个对象数组。