2011-04-25 19 views
6

Me gustaría poder incluir una entidad hija con la entidad principal en mi consulta de linq a sql.En linq a sql ¿cómo incluyo la entidad hijo con la consulta inicial?

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

En mi página ASPX, quiero mostrar el Departamento de cada empleado sin que tenga que volver atrás y consultar la base de datos cada vez que necesita el nombre del departamento de la entidad para cada departamento de una cada empleado.

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

si la cambio para incluir el departamento, me sale un error:

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]'. 

Respuesta

14

Para LINQ to SQL se puede cambiar el (ejemplo de código en C#) DataloadOptions:

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

(Include() solo es compatible con Linq para Entidades)

+0

Excelente - ¡gracias! Por lo tanto, no es necesario que lo agregue a mi consulta particular cada vez. Solo especifico en el contexto de datos que cuando consulto para Empleado, también debe incluir siempre los datos del Departamento relacionados, ¿correcto? – EdenMachine

+0

@EdenMachine - sí, está en el contexto de contexto – BrokenGlass

+0

Genial, ¡gracias! – EdenMachine

Cuestiones relacionadas