Список с помощью Lambda - PullRequest
       1

Список с помощью Lambda

0 голосов
/ 11 февраля 2019

У меня есть две таблицы, которые я хочу объединить для создания отчета

User List

Transaction

Я использую этот код для присоединения к таблице

db.tblProcessorLists.GroupJoin(
                 db.tbltransactions,
                 a => a.UserID,
                 b => b.UserID,
                 (x, y) => new
                 {
                     Processor = x,
                     Data = y.ToList()
                 }
         )
         .Select(a => new Report
         {
             Processor = a.Processor,
             TotalTrans = a.Data
         }).ToList();

и это вывод

enter image description here

Я хочу вставить данныев моем классе отчета.

enter image description here

это возможно и как?

РЕДАКТИРОВАТЬ Я уже пробовал это, но он не работает

db.tblProcessorLists.GroupJoin(
                 db.tbltransactions,
                 a => a.UserID,
                 b => b.UserID,
                 (x, y) => new
                 {
                     Processor = x,
                     Data = y.ToList()
                 }
         )
         .Select(a => new Report
         {
             Processor = a.Processor,
             SummaryTransaction = a.Data.Select(x=>new Summaryreport{ month=x.month, year=x.year, total=x.totaltransaction})
         }).ToList();

1 Ответ

0 голосов
/ 12 февраля 2019

Хотя вы не указали, я думаю, что вы хотите суммировать все данные за один месяц.Таким образом, вместо:

Processor Month   Value
    1    2018-1     2
    1    2018-1     3  => sum all 2018-1 values of processor 1: 2+3=5
    1    2018-2     4
    1    2018-2     5  => sum all 2018-2 values of processor 1: 4+5=9
    2    2018-1     1
    2    2018-1     2  => sum all 2018-1 values of processor 2: 1+2=3

Все, что вам нужно сделать, это изменить ResultSelector в вашем GroupJoin, чтобы он группировал все данные в группы с одинаковым [год, месяц].Результатом является [год, месяц, сумма] всех значений с этим годом и месяцем] ​​

См. Одну из перегрузок Enumerable.GroupBy

var result = db.tblProcessorLists.GroupJoin(  // GroupJoin processors and transactions
    db.tbltransactions,
    processor => processor.UserID,       // from every processor take the UserId
    transaction => transaction.UserID,   // from every transaction take the UserId

    // ResultSelector: use eacht processor with its zero or more matching transactions
    // to make one new object
    (processor, transactionsOfThisProcessor) => new
    {
        Processor = processor,

        // group all transactionsOfThisProcessor into groups with same [year, month]
        // and sum the values of all transactions in each group
        TransactionTotals = transactionsOfThisProcessor
            .GroupBy(transaction => new 
            {
                Year = transaction.Year,       // KeySelector: make groups with 
                Month = transaction.Month      // same [year, month]
            },

            // element selector: Transaction.Value
            transaction => transaction.Value,

            // ResultSelector: key = [year, month],
            // elements are all values of this [year, month] group
            // sum all values
            (key, valuesWithThisYearMonth) => new
            {
                Year = key.Year,
                Month = key.Month,
                Total = valuesWithThisYearMonth.Sum(),
            }),
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...