Выбор данных из данных - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу выбрать данные из таблицы данных. В настоящее время я использую анонимный список. Данные могут выглядеть следующим образом:

ID  AMOUNT INVOICE_DATE

1 9,5 06.03.2020
2 12,4 06.03.2020
1 12,5 07.03.2020
2 14,3 07.03.2020
3 15 07.03.2020
2 17 08.03.2020
3 19,2 08.03.2020
3 12 08.03.2020

И способ, которым я должен сделать запрос, выглядит следующим образом:

ID  AMOUNT  TOTAL_AMOUNT_SOLD INVOICE_DATE

1 12,5 23 07.03.2020
2 14,3 26,7 07.03.2020
3 15 15 07.03.2020
2 17 43,7 08.03.2020
3 31,2 46.2 08.03.2020

Это мой код прямо сейчас:

                var soldInDT = dt.AsEnumerable()
                .GroupBy(x => x.Field<int>("ID"))
                .Select(grp => new
            {
                ID = grp.FirstOrDefault().Field<int>("ID"),
                AMOUNT = grp.Where(x => x.Field<int>("ID") == grp.Key).Sum(x => x.Field<double>("AMOUNT")),
                TOTAL_AMOUNT_SOLD = grp.Where(x => x.Field<int>("ID") == grp.Key && x.Field<DateTime>("INVOICE_DATE") < startDate).Sum(x => x.Field<double>("AMOUNT")),
                DATE = grp.FirstOrDefault().Field<DateTime>("INVOICE_DATE")
            }).ToList();

И есть ли более быстрый способ сделать это, чем с помощью лямбда-выражений и тех, списки?

1 Ответ

0 голосов
/ 17 апреля 2020

Вместо

ID = grp.FirstOrDefault().Field<int>("ID")

просто скажите

ID = grp.Key

Вместо

grp.Where(x => x.Field<int>("ID") == grp.Key).Sum(x => x.Field<double>("AMOUNT"))

просто скажите

grp.Sum(x => x.Field<double>("AMOUNT"))

Вместо

grp.Where(x => x.Field<int>("ID") == grp.Key && x.Field<DateTime>("INVOICE_DATE") < startDate).Sum(x => x.Field<double>("AMOUNT"))

просто скажи

grp.Where(x => x.Field<DateTime>("INVOICE_DATE") < startDate).Sum(x => x.Field<double>("AMOUNT"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...