Tengo el siguiente bloque de consultas de linq para calcular algunos valores para un informe.¿Por qué los valores de mis consultas linq no aparecen inmediatamente?
var items = (from trans in calclabordb.Sales_Transactions
select trans).SelectMany(st => st.Sales_TransactionLineItems).Where(stli => stli.TypeID == typeID);
decimal test = items.Where(stli => stli.Inventory_Item is Base).Sum(stli => (decimal?)stli.Inventory_Item.IntExtraServiceAmount) ?? 0;
decimal test2 = items.Where(stli => stli.Inventory_Item is Extra).Sum(stli => (decimal?)stli.ItemPrice) ?? 0;
decimal test3 = test + test2;
current.ExtraSales = items.Where(stli => stli.Inventory_Item is Base).Sum(stli => (decimal?)stli.Inventory_Item.IntExtraServiceAmount) ?? 0 +
items.Where(stli => stli.Inventory_Item is Extra).Sum(stli => (decimal?)stli.ItemPrice) ?? 0;
He pasado por el código en un depurador y he notado algunas rarezas. Después de asignar en test
su valor es 0. Después de asignar en test2
test2 == 0
y test == 11.31
después de asignar en test3 test == 11.31
test2 == 11.28
y test3 == 22.59
después de asignar en ExtraSales
ExtraSales == 11.31
. El valor en ExtraSales
cuando todo este completo debe ser 22.59. ¿Que está pasando aqui?
EDITAR: He agregado líneas adicionales después de la asignación en ExtraSales
pero el valor no cambia.
Respondido como un profesional. –
Sabes que debería haberlo sabido mejor. Me he encontrado con ese problema de precedencia en el pasado en un escenario donde? tenía mayor prioridad que otro operador. El depurador parece haberme dado información engañosa. – Mykroft