Подтвердить что ты не робот

Linq to SQL.Sum() без группы... в

У меня есть что-то вроде этого:

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

есть ли способ сделать

itemsCart.Sum() //not sure what to pass into the function

чтобы получить сумму o.WishListItem.Price или мне нужно получить еще один iQueryable <T> из базы данных с группой... в?

4b9b3361

Ответ 1

Как насчет:

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

AsEnumerable имеет значение, этот запрос будет выполняться локально (Linq To Objects).

Ответ 2

вы можете:

itemsCart.Select(с = > c.Price).sum();

Чтобы попасть в db только один раз, выполните:

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

Дополнительное спасение в оба конца стоит того:)

Ответ 3

Try:

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

На самом деле это будет лучше:

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

Потому что вы будете получать только один столбец из базы данных.

Ответ 4

Попробуй это:

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

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

Я думаю, что это проще!

Ответ 5

Я знаю, что это старый вопрос, но почему вы не можете это сделать:

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

Я не уверен, как это сделать с помощью выражений запроса.