выберите, сгруппируйте, суммируйте с ASP LINQ + приватный метод сравнения - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю над проектом ASP MVC, и у меня есть часть, где мне нужно экспортировать некоторые данные в файл Excel.Дело в том, что мне нужно сложить несколько строк, чтобы отобразить одну строку.Я не знаком с SQL или Linux, и я изо всех сил, чтобы получить результат, который я хочу.

должно быть 4 столбца: requester(string), date(datetime), collection(string), timeinvested(int).

группировка должна быть по столбцу 'collection' (строка) по умолчанию, и если вход фильтра для запрашивающей стороны или даты был заполнен, чем это было быбыть следующим уровнем группировки.столбец 'timespent' должен суммироваться по результату группировки.

пример:

requester, date, collection, timeinvested
(1) john, jan 1st, 2019, collection1, 1
(2) mike, jan 1st, 2019, collection1, 3
(3) eric, jan 1st, 2019, collection1, 2
(4) july, jan 1st, 2019, collection2, 5
(5) john, jan 1st, 2012, collection1, 3

здесь у нас есть 5 строк из таблицы, как только мы фильтруем экспорт только по умолчанию (коллекция столбцов), то строки 1 + 2 + 3 + 5 должны суммироваться до 1 строки, а вторая строка будет строкой 4, потому что коллекции разные.например так:

requester, date, collection, timeinvested
(1) john, jan 1st, 2019, collection1, 9
(2) july, jan 1st, 2019, collection2, 5

Если я решу фильтровать также по запросу или дате, то это должно применяться соответственно.

одна большая вещь здесь заключается в том, что существует закрытый метод, который проверяет дату на определенную дату, и он должен экспортировать в файл дату года, если она после или до проверенной даты.например: относительная дата декабрь 1-го числа того же года, если дата строки предшествует относительной дате, то мы должны написать дату год - 1;

спасибо

var q = (from a in items
                 select new {
                     Requester = a.Requester.Name,
                     Collection = a.Collection.Name,
                     TimeSpent = a.TimeSpent,
                     Year = a.Date,
                 })

                 .ToList()
                 .GroupBy(x => new {
                     x.Requester,
                     x.Collection,
                     x.Year,
                     x.TimeSpent
                 })
                 .Select(y => new CollectionModel {
                     Requester = y.Key.Requester,
                     Collection = y.Key.Collection,
                     TimeSpent = y.Sum(z => Convert.ToInt32(z.TimeSpent)),
                     Year = checkDate(y.Key.Year),
                 });

        return q.ToList();

вот какя заставил это работать:

var q = (from a in items
                 select new {
                     Requester = a.Requester.Name,
                     Collection = a.Collection.Name,
                     TimeSpent = a.TimeSpent,
                     Year = a.Date,
                 })
                 .Where(Where(a => dt == null || (dt != null && a.Year == dt.Year))
                 .ToList()
                 .GroupBy(x => new {
                     x.Requester,
                     x.Collection,
                     x.Year,
                 })
                 .Select(y => new CollectionModel {
                     Requester = y.Key.Requester,
                     Collection = y.Key.Collection,
                     TimeSpent = y.Sum(z => Convert.ToInt32(z.TimeSpent)),
                     Year = checkDate(y.Key.Year),
                 });

        return q.ToList();

1 Ответ

0 голосов
/ 01 марта 2019

Сначала удалите «x.TimeSpent» из вашего GroupBy, вам нужно агрегировать эту переменную, а не группировать по ней.во-вторых, не могли бы вы опубликовать вывод?

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