Сумма свойств с использованием LINQ - PullRequest
1 голос
/ 28 июня 2010
DealsThisMonthOpen = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Open").Count(),
DealsThisMonthLost = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Lost").Count(),
DealsThisMonthWon = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Won").Count(),
DealsThisMonth = DealsThisMonthOpen + DealsThisMonthLost + DealsThisMonthWon;

Последняя строка неверна по синтаксису.Можно ли сделать это так или мне придется написать запрос для этого свойства, чтобы вычислить сумму?

Спасибо

Ответы [ 3 ]

2 голосов
/ 28 июня 2010

Кстати, Count() также поддерживает predicate аргумент: http://msdn.microsoft.com/en-us/library/bb535181.aspx

Так что вы можете:

var a = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Open"),
var b = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Lost"),
var c = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Won"),

new foobar
{
    DealsThisMonthOpen = a,
    DealsThisMonthLost = b,
    DealsThisMonthWon = c,
    DealsThisMonth = a + b + c
};
2 голосов
/ 28 июня 2010

Может быть, я что-то упустил, но это определенно должно сработать.

Метод Count() возвращает int, поэтому DealsThisMonthOpen, DealsThisMonthLost и DealsThisMonthWon являются целочисленными значениями. DealsThisMonth - это просто сумма этих трех целочисленных значений.

Вы также можете сделать его немного чище (если только позже вам не понадобятся три различных значения для чего-то другого:

var dealsThisMonth = deals
    .Count(d => d.DateCreated.Month == date.Month
        && (new string[] { "Open", "Lost", "Won" }).Contains(d.DealStatus));
0 голосов
/ 28 июня 2010

Рассматривали ли вы метод расширения?Где вы предоставляете функцию суммы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...