Можно ли в операторе LINQ, использующем замыкания, указать условие where внутри замыкания? - PullRequest
3 голосов
/ 03 марта 2011

Вот проблема, которую я пытаюсь решить.У меня есть 3 таблицы базы данных - Sales, Customer и Time.Одна запись о продажах связана только с одной записью клиента и одна запись времени.Я хочу, только за 1996 год, посмотреть на общий объем продаж по регионам (клиент привязан к определенному региону), для следующих следующих разделов: по праздникам, нерабочим дням, будням и выходным.Вот примерно такой запрос, который я пытаюсь добавить в комментариях.

var totalSales = 
    from s in sales
    where s.Time.Year = 1996
    group s by s.Customer.Region into g
    select new { Region = g.Key, 
                Holidays = g.Sum(s => s.Total_Amount), // WHERE (s => s.Time.Holiday_flag = true)
                NonHolidays = g.Sum(s => s.Total_Amount), // WHERE (s => s.Time.Holiday_flag = false)
                Weekdays = g.Sum(s => s.Total_Amount), // WHERE (s => s.Time.Weekday_flag = true)
                Weekends = g.Sum(s => s.Total_Amount)}; // WHERE (s => s.Time.Weekday_flag = false)

Чтобы сделать это, я должен был бы иметь возможность в каждом закрытии дополнительно ограничивать результаты.Это возможно?Нужно ли реструктурировать запрос?Конечно, я мог бы сделать это, разбив его на 4 отдельных запроса, но было бы очень приятно сделать это за один.

Спасибо.

1 Ответ

6 голосов
/ 03 марта 2011

Ну, вы можете попробовать это:

Holidays = g.Where(s => s.Time.Holiday_flag).Sum(s => s.Total_Amount),
NonHolidays = g.Where(s => !s.Time.Holiday_flag).Sum(s => s.Total_Amount),
Weekdays = g.Where(s => s.Time.Weekday_flag).Sum(s => s.Total_Amount),
Weekends = g.Where(s => !s.Time.Weekday_flag).Sum(s => s.Total_Amount)

или

Holidays = g.Sum(s => s.Time.Holiday_flag ? s.Total_Amount : 0),
// etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...