31 Stimmen

Linq to SQL .Sum() ohne Gruppierung ... in

Ich habe so etwas wie das:

var itemsInCart = from o in db.OrderLineItems
                  where o.OrderId == currentOrder.OrderId
                  select new { o.OrderLineItemId, ..., ..., o.WishListItem.Price}

Gibt es eine Möglichkeit,

itemsCart.Sum() //nicht sicher, was an die Funktion übergeben werden soll

um die Summe von o.WishListItem.Price zu erhalten oder muss ich ein weiteres IQueryable< T> aus der Datenbank mit group ... in ... bekommen?

70voto

Christian C. Salvadó Punkte 763569

Was ist mit:

itemsInCart.AsEnumerable().Sum(o=>o.Price);

AsEnumerable macht den Unterschied, diese Abfrage wird lokal ausgeführt (Linq To Objects).

19voto

eglasius Punkte 35447

Sie können:

itemsCart.Select(c=>c.Price).Sum();

Um die Datenbank nur einmal abzufragen, tun Sie Folgendes:

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();

Die zusätzliche Datenbankabfrage, die dadurch gespeichert wird, lohnt sich :)

8voto

Jonathan Parker Punkte 6551

Versuchen Sie:

itemsCard.ToList().Select(c=>c.Price).Sum();

Tatsächlich würde dies besser funktionieren:

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();

Weil Sie nur eine Spalte aus der Datenbank abrufen.

1voto

Dirceu Henrique Punkte 39

Versuche dies:

var itemsInCart = from o in db.OrderLineItems
                  where o.OrderId == currentOrder.OrderId
                  select o.WishListItem.Price;

return Convert.ToDecimal(itemsInCart.Sum());

Ich denke, es ist einfacher!

1voto

Trisped Punkte 5458

Ich weiß, dass dies eine alte Frage ist, aber warum kannst du es nicht so machen:

db.OrderLineItems.Where(o => o.OrderId == currentOrder.OrderId).Sum(o => o.WishListItem.Price);

Ich bin mir nicht sicher, wie man das mit Abfrageausdrücken machen soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X