Используя контроллер C# API, мне нужно объединить элементы с одинаковым идентификатором в один - PullRequest
1 голос
/ 07 апреля 2020

Обычно я не работаю с C#, но есть проблема, которую мне нужно решить.
У меня есть БД, которая возвращает несколько строк для каждого документа, если этот документ содержит более 1 строки данных, и у меня есть нет способа изменить способ его работы.
Тем не менее мне нужно отображать каждый документ только как общее количество всех строк.
Я хотел бы включить мой контроллер API для итерации по всем элементам, проверить, имеют ли они одинаковый идентификатор, и если это так, добавьте значения для указанных полей c, оставив при этом некоторые из них без изменений.

Что-то вроде:

Если это объекты списка
{ID: 1, Account : AB C, значение: 200},
{ID: 1, учетная запись: AB C, значение: 50},
{ID: 2, учетная запись: BCD, значение: 150},

Тогда это будет вывод
{ID: 1, счет: AB C, значение: 250},
{ID: 2, счет: BCD, значение: 150},

Вот мой код контроллера:

var List = await (from s in _context.tbl1
                // Join tbl2 table as t context
                join t in _context.tbl2 on s.Ref equals t.Ref
                // Join tbl3 table as u context
                join u in _context.tbl3 on s.Account equals u.Account
                where s.Account == id
                // Use View Model
                select new ViewModel
                {
                    ID = s.Ref,
                    Account = s.Account,
                    Name = u.Name,
                    Date = s.Date,
                    Value = t.Value
                }).ToListAsync();

Если это не очень хорошая идея, я всегда могу сделать это на стороне переднего конца, но я хотел бы повлиять передний конец в наименьшем количестве возможных путей.

1 Ответ

3 голосов
/ 07 апреля 2020

Это должно быть что-то вроде:

list.GroupBy(g => g.ID).Select(x => new { 
    ID = x.Key,
    Account = x.Select(c => c.Account).FirstOrDefault(),
    Value = x.Sum(c => c.Value)
    });

Вы можете увидеть мой пример здесь

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