web-dev-qa-db-fra.com

Linq vers SQL .Sum () sans groupe ... dans

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?

27
roman m

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).

63
CMS

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 :)

16
eglasius

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.

7
Jonathan Parker

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.

1
Trisped

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!

1
Dirceu