J'ai quelques classes générées par DBML qui sont liées ensemble par un identifiant, par ex.Est-ce que ExecuteQuery peut renvoyer une classe générée par DBML sans qu'elle récupère toutes les informations pour cette classe?
ClassA {
AID,
XID,
Name
}
ClassB {
AID,
ExtraInfo,
ExtraInfo2
}
En utilisant quelque chose comme db.ClassAs.Where(XID == x)
et itérer ce résultat, il finit par exécuter une requête pour chacun des ClassAs et chacun des ClassBs, ce qui est lent.
Sinon, j'ai essayé d'utiliser ExecuteQuery
pour récupérer toutes les informations qui m'intéressent et pour lesquelles j'ai renvoyé un ClassA. En répétant cela je finis par faire la même chose, c'est-à-dire faire beaucoup d'extractions individuelles contre 1. Si je le stocke dans un ClassC (qui n'est pas associé à une entité DB) qui a les champs d'intérêt des deux ClassA et ClassB, cette requête est beaucoup plus rapide, mais c'est ennuyeux b/c je viens de créer un ClassC inutile.
Comment puis-je toujours utiliser ClassA, qui associe à ClassB, et toujours utiliser ExecuteQuery
pour exécuter 1 requête par rapport au nombre de requêtes A * B?
Je ne veux pas un type de Anon. Dans votre exemple, je voudrais obtenir un type de livre parce que je voudrais faire le type de livre dans un JavaScriptSerializer qui a un JavaScriptConverter spécifiquement pour le type de livre par rapport je ne serais pas capable d'utiliser le convertisseur avec un type anon . Idéalement, je voudrais finir avec une instance de livre et je n'aurais récupéré le nom du livre, le nom de l'auteur et éditeur de livre dans une requête au lieu de faire deux requêtes, à savoir SELECT * FROM Book Où .. . et SELECT * FROM Auteur Où ... Considérez: var résultats = ... foreach (Livre x dans les résultats) {} – Faury
En utilisant un type anon, le foreach se plaint, ce qui est logique, mais si je change var results = ... à IEnumerable results = ..., en itérant dans la boucle for, il finit par exécuter SELECT * FROM Books Where ... et SELECT * FROM Authors Where ..., ce qui est ce que je suis essayer d'empêcher vs l'exécution de 1 requête plus optimale. –
Faury
Au lieu d'un type anon, pouvez-vous en avoir un qui stocke les résultats ... Mise à jour de la réponse maintenant. – DaveShaw