Domanda

Ho una query simile a questa:

public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
    DatabaseDataContext db = new DatabaseDataContext();
    return (from o in db.Orders
            orderby o.CreatedDate descending
            select o)
            .Skip(pageIndex * recordCount)
            .Take(recordCount)
            .ToList();
}

Devo stampare le informazioni dell'ordine e dell'utente che lo ha creato:

foreach (var o in FetchLatestOrders(0, 10))
{
    Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}

Questo produce una query SQL per portare gli ordini e una query per ogni ordine da portare al cliente.È possibile ottimizzare la query in modo che contenga gli ordini e il cliente in un'unica query SQL?

Grazie

AGGIORNAMENTO:Su suggerimento di Sirrocco ho modificato la query in questo modo e funziona.Viene generata una sola query di selezione:

public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
    var options = new DataLoadOptions();
    options.LoadWith<Post>(o => o.Customer);
    using (var db = new DatabaseDataContext())
    {
        db.LoadOptions = options;
        return (from o in db.Orders
                orderby o.CreatedDate descending
                select o)
                .Skip(pageIndex * recordCount)
                .Take(recordCount)
                .ToList();
    }
}

Grazie scirocco.

È stato utile?

Soluzione

Qualcos'altro che puoi fare è EagerLoading.In Linq2SQL puoi usare LoadOptions : Altro su LoadOptionsUna cosa MOLTO strana di L2S è che puoi impostare LoadOptions solo prima che la prima query venga inviata al database.

Altri suggerimenti

potresti voler esaminare l'utilizzo di query compilate

dai un'occhiata a http://www.3devs.com/?p=3

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top