Consulta de Linq en tres niveles de tablas para generar suma
-
06-07-2019 - |
Pregunta
Tengo una serie de tablas que se unen con las relaciones Clave primaria / Clave externa. Tengo una tabla de transacciones, y cada transacción hace referencia a un solo producto. Cada producto puede existir en una y solo una Categoría:
Categories Products Transactions
------------- ------------- -----------------
CategoryId ProductId TransactionId
CategoryName CategoryId ProductId
ProductName TransactionAmount
Estoy aprendiendo LinqToSql y he usado expresiones lambda para acceder a los Productos en cada categoría (x = > x.Products). Pero lo que intento hacer es acceder a la tabla Transacciones, específicamente para obtener una suma de todas las transacciones por categoría.
Estoy seguro de que podría hacer esto creando uniones manuales en mi declaración Linq. Pero no parece que deba hacer esto, ya que todas mis tablas están unidas como PF / FK en el modelo.
¿Alguien puede ofrecer un ejemplo de cómo comenzar?
Solución
Sin intentar compilarlo, creo que esto funcionará de la manera que desee. Se supone que tiene las asociaciones configuradas en el contexto de datos LINQ to SQL.
var transPerCategory = db.Categories
.Select( c => new {
Name = c.CategoryName,
Amount = c.Products
.Sum( p => p.Transactions
.Sum( t => t.TransactionAmount )
)
});