Tengo algunas consultas de linq que tienen redundancia. Me gustaría restarle un factor de código. Se trata de extensiones de unión que son IQueryable, y es importante que no haga que la consulta se evalúe antes de lo que sería sin la refactorización.refactorización de la expresión IQueryable de LINQ para eliminar partes duplicadas de las consultas
Aquí es una consulta simplificada:
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
};
Lo que quiero es factorizar º lógica "dado una orden, lo que es el primer artículo, han comprado". Estoy usando la misma lógica en otras consultas. ¿Cómo puedo factorizarlo en un método compartido?
En general, para la reutilización de código y IQueryables, lo que he podido hacer es un código que toma un IQueryable entrando y produce un IQueryable/IOrderedQueryable como salida. Con tales funciones puedo construir expresiones LINQ con código reutilizable que aún difieren la consulta hasta que la consulta esté completamente construida. Aquí, dado que solo tengo un int (el ID de pedido), no estoy seguro de cómo hacerlo funcionar.
gracias
Esta es una gran pregunta de alto nivel para Linq'ers. Le pregunté lo mismo básico y no he recibido mucho feedback. – Merritt