2011-08-27 29 views
1

下面的代碼用於Linq to SQL解決方案,並且位於窗體的Load事件中。如何將Linq傳遞給函數的SQL類型

它可以正常顯示人員姓名的有序列表,並將值成員設置爲該人員的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" 

謝謝! Dan

+1

什麼是'tbl'和'fld'參數應該是什麼意思?它們與你發佈的代碼有什麼關係? – svick

+0

不要忘記標記你最喜歡的答案;-) – Steven

回答

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)。但是,這種方法有點脆弱,因爲沒有編譯時支持。因此,另一種選擇是定義包含兩個公共屬性PersonPeopleID的特殊Class(我們將其稱爲PersonDTO),並讓該方法返回IEnumerable(Of PersonDTO)或甚至更好的PersonDTO對象數組。