2011-04-25 51 views
6

我想能夠包括一個子實體與主要實體在我的LINQ到SQL查詢。在LINQ to sql中,如何包含具有初始查詢的子實體?

Public Function GetEmployees() As IEnumerable(Of Employee) 
    Dim dc As New MyDataContext() 
    Return From e In dc.Employee 
End Function 

在我的ASPX頁面,我想顯示每個員工的部門沒有它不必回去每次需要的部門名稱從部門實體爲每一個員工的每一次查詢數據庫。

<asp:repeater...> 
    ... 
     <%# Eval("FirstName") %><br /> 
     <%# Eval("LastName") %><br /> 
     <%# Eval("Department.Name") %> <--- re-queries db every time on this line? 
    ... 
</asp:repeater> 

如果我改變它包括部門,我得到一個錯誤:

Public Function GetEmployees() As IEnumerable(Of Employee) 
    Dim dc As New MyDataContext() 
    Return From e In dc.Employee Select e, e.department 
End Function 


Unable to cast object of type 'System.Data.Linq.DataQuery`1[VB$AnonymousType_0`2[MyNameSpace.Employee,System.Data.Linq.EntitySet`1[MyNameSpace.Employee.Department]]]' to type 'System.Collections.Generic.IEnumerable`1[MyNameSpace.Employee]'. 

回答

14

對於LINQ to SQL中,您可以更改DataloadOptions(在C#代碼示例):

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Employee>(p => p.department); 
dc.LoadOptions = dlo; 

Include()僅支持Linq to Entities)

+0

優秀 - 謝謝!所以,我不需要每次都將它添加到我的特定查詢中。我只是在datacontext中指定,當我查詢Employee時,它也應該總是包含相關的部門數據,對嗎? – EdenMachine 2011-04-25 22:08:19

+0

@EdenMachine - 是的,它在數據上下文範圍內 – BrokenGlass 2011-04-25 23:29:53

+0

非常感謝! – EdenMachine 2011-04-26 15:35:06