Question

J'ai une table "commandes" avec un écart de clé "ProductID".

J'en veux pour preuve les commandes dans une grille avec les nom du produit, sans LazyLoad pour de meilleures performances, mais si je utiliser DataLoadOptions il récupère tous Les champs de produits, dont les coutures, comme un overkill.

Est-il un moyen de récupérer seulement le nom du Produit dans la première requête?Puis-je définir un attribut dans la DBML?

Dans ce table dit que "la clé Étrangère valeurs" sont "Visibles" dans Linq to SQL, mais vous ne savez pas ce que cela signifie.

Modifier:Changé le titre, parce que je ne suis pas vraiment sûr qu'il n'y a pas de solution.
Ne peux pas croire que personne n'a le même problème, c'est un scénario très commun.

Était-ce utile?

La solution 3

Je reçois la solution à cette autre question Qui .net ORM peut traiter ce scénario, qui est liée à la liammclennan la réponse, mais plus clair (peut-être que la question est plus clair aussi)

Autres conseils

Ce que vous demandez est un niveau de l'optimisation de l'linq-to-sql ne fournit pas.Je pense que votre meilleur pari est de créer une requête qui renvoie exactement les données que vous souhaitez, peut-être un type anonyme:

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 };

Si vous sélectionnez uniquement les colonnes que vous voulez dans la requête linq, et ensuite appeler .ToList() dans la requête, il sera immedietly exécuté, et ne ramener les colonnes qui vous intéressent.Par exemple si vous faites cela:

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

Vous obtiendrez une liste de noms de produits stockés dans les résultats, et lorsque la requête s'exécute sur le serveur il ne fera que ramener le Nom de la colonne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top