Cómo: Controlar la cantidad de datos relacionados que se recuperan (LINQ to SQL)

Actualización: November 2007

Utilice el método LoadWith para especificar qué datos relacionados con el destino principal deben recuperarse al mismo tiempo. Por ejemplo, si sabe que va a necesitar información sobre los pedidos de los clientes, puede utilizar LoadWith para asegurarse de que la información de los pedidos se va a recuperar al mismo tiempo que la información de los clientes. Con este enfoque, sólo se requiere un viaje a la base de datos para ambos conjuntos de información.

Nota:

Puede recuperar datos relacionados con el destino principal de la consulta recuperando un producto cruzado como una gran proyección; por ejemplo, puede recuperar los pedidos cuando el destino de la consulta son los clientes. Sin embargo, este enfoque a menudo tiene desventajas. Por ejemplo, los resultados son simples proyecciones, no entidades que se puedan cambiar y conservar mediante LINQ to SQL. Además, podría recuperar una gran cantidad de datos que no necesita.

Ejemplo

En el siguiente ejemplo, se recuperan todos los Orders de todos los Customers de Londres cuando se ejecuta la consulta. En consecuencia, el acceso posterior a la propiedad Orders de un objeto Customer no desencadena una nueva consulta de base de datos.

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo

Dim londonCustomers = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In londonCustomers
    Console.WriteLine(custObj.CustomerID)
Next
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;

var londonCustomers =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (var custObj in londonCustomers)
{
    Console.WriteLine(custObj.CustomerID);
}

Vea también

Otros recursos

Realizar consultas en la base de datos (LINQ to SQL)