J'ai quelque chose comme ça:
var itemsInCart = from o in db.OrderLineItems
where o.OrderId == currentOrder.OrderId
select new { o.OrderLineItemId, ..., ..., o.WishListItem.Price}
est-il possible de faire un
itemsCart.Sum() //not sure what to pass into the function
pour obtenir la somme de o.WishListItem.Price ou dois-je obtenir un autre iQueryable <T> de la base de données avec le groupe ... dans?
Qu'en est-il de:
itemsInCart.AsEnumerable().Sum(o=>o.Price);
AsEnumerable fait la différence, cette requête s'exécutera localement (Linq To Objects).
vous pouvez:
itemsCart.Select (c => c.Price) .Sum ();
Pour frapper la base de données une seule fois:
var itemsInCart = (from o in db.OrderLineItems
where o.OrderId == currentOrder.OrderId
select new { o.OrderLineItemId, ..., ..., o.WishListItem.Price}
).ToList();
var sum = itemsCart.Select(c=>c.Price).Sum();
L'aller-retour supplémentaire économisé en vaut la peine :)
Essayer:
itemsCard.ToList().Select(c=>c.Price).Sum();
En fait, cela fonctionnerait mieux:
var itemsInCart = from o in db.OrderLineItems
where o.OrderId == currentOrder.OrderId
select new { o.WishListItem.Price };
var sum = itemsCard.ToList().Select(c=>c.Price).Sum();
Parce que vous ne récupérerez qu'une colonne de la base de données.
Je sais que c'est une vieille question, mais pourquoi ne pouvez-vous pas le faire comme:
db.OrderLineItems.Where(o => o.OrderId == currentOrder.OrderId).Sum(o => o.WishListItem.Price);
Je ne sais pas comment faire cela en utilisant des expressions de requête.
Essaye ça:
var itemsInCart = from o in db.OrderLineItems
where o.OrderId == currentOrder.OrderId
select o.WishListItem.Price;
return Convert.ToDecimal(itemsInCart.Sum());
Je pense que c'est plus simple!