J'ai certaines requêtes linq qui ont une redondance que je voudrais factoriser un seul morceau de code. Ce sont des expersions de jointure qui sont IQueryable, et son importance je ne provoque pas l'évaluation de la requête plus tôt que ce serait sans le refactoring.refactoring expression LINQ IQueryable pour supprimer des portions dupliquées de requêtes
Voici une requête simplifiée:
var result =
from T in db.Transactions
join O in db.Orders on T.OrderID equals O.OrderID
join OD in db.OrderDetails on O.OrderID equals OD.OrderID into OrderDetails
let FirstProductBought = OrderDetails.First().Select(OD => OD.Product.ProductName)
select new
{
TransactionID = T.TransactionID,
OrderID = O.OrderID,
FirstProductBought = FirstProductBought
};
Ce que je veux factoriser est e logique « donné un ordre, ce qui est le premier produit acheté ». J'utilise la même logique dans d'autres requêtes. Comment puis-je l'intégrer dans une méthode partagée?
Généralement, pour la réutilisation de code et IQueryables, ce que j'ai pu faire est le code qui prend un IQueryable entrant et produit un IQueryable/IOrderedQueryable en tant que sortie. Avec de telles fonctions, je peux construire des expressions LINQ avec un code réutilisable qui diffère encore la requête jusqu'à ce que la requête soit entièrement construite. Ici, puisque je n'ai qu'un int (le orderID) je ne sais pas comment le faire fonctionner.
grâce
Ceci est une excellente question de haut niveau pour Linq'ers. J'ai demandé la même chose de base et n'ai pas eu beaucoup de commentaires. – Merritt