Domanda

Ho una tabella "ordini" con una chiave straniera "ProductID".

Voglio mostrare gli ordini in una griglia con il file nome del prodotto, senza LazyLoad per prestazioni migliori, ma io se lo uso Opzioni di caricamento dati si recupera Tutto Campi di prodotto, che sembra a eccessivo.

C'è un modo per recuperare soltanto il nome del prodotto nella prima query?Posso impostare alcuni attributi nel DBML?

In questo tavolo dice che i "valori di chiave esterna" sono "visibili" in Linq To SQL, ma non so cosa significhi.

Modificare:Ho cambiato il titolo perché non sono proprio sicuro che non ci sia una soluzione.
Non posso credere che nessuno abbia lo stesso problema, è uno scenario molto comune.

È stato utile?

Soluzione 3

Ottengo la soluzione in quest'altra domanda Quale ORM .net può gestire questo scenario, che è correlato a liammclennan risposta ma più chiara (forse anche la domanda era più chiara)

Altri suggerimenti

Quello che stai chiedendo è un livello di ottimizzazione che linq-to-sql non fornisce.Penso che la soluzione migliore sia creare una query che restituisca esattamente i dati desiderati, possibilmente di tipo anonimo:

from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };

Se selezioni solo le colonne che desideri nella query linq e quindi chiami .ToList() sulla query, verrà eseguita immediatamente e riporterà solo le colonne che ti interessano.Ad esempio se fai questo:

var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();

Otterrai un elenco di nomi di prodotti memorizzati nei risultati e quando la query viene eseguita sul server riporterà solo la colonna ProductName.

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