Linq запрос Groupby в C # - PullRequest
       3

Linq запрос Groupby в C #

0 голосов
/ 10 октября 2019

У меня есть Персональная таблица и таблица сохраняемых транзакций.

Персональная таблица будет такой.

[ID] [AccNum] [Name] [AccType] [IsMainPerson] [IsDelected] [RegionId]

1, 001, David, JoinAcc, True, False, NY

2, 002, John, SoloAcc, True, False, NY

3, 001, Terry, JoinAcc, False, False, NY

Таблица сохраняемых транзакций будет такой.

[ID], [AccNum] [Amount] [IsDeleted]

1, 001, 10000, False

2, 002, 10000, False

3, 001, 15000, False

Iесть viewmodel для сохранения списка людей и totalcount. Мое представление итогового счета правильное, и у меня есть проблема с представлением списка людей.

Существует RegionId из другого списка. Когда я щелкаю этот список, я взял RegionId в качестве параметра и хочу показать свой результат. Итак, я сделал условное linq с RegionId и объединение двух таблиц равным «AccNum». Как я могу исправить мой запрос linq, чтобы получить желаемый результат, который я показал ниже.

Мой контроллер

[HttpGet]
        public ActionResult GetSavingGroupByRegion(string id = null)
        {
            IEnumerable<SavingGroupByRegionViewModel> savingbyRegion = (from p in db.TB_PersonalInformation.Where(x => x.RegionID.Equals(id) && x.IsDeleted != true && x.IsMainPerson == true).AsQueryable()
                                                                        join ADT in db.TB_AccountDetailTransaction on
                                                                        p.AccountNumber equals ADT.BankAccountNumber
                                                                        select new SavingGroupByRegionViewModel()
                                                                        {
                                                                            Name = p.Name,
                                                                            AccountNumber = p.AccountNumber,
                                                                            AccountType = p.AccountType,
                                                                            Address = p.Address,
                                                                            PersonAmount = ADT.Amount,
                                                                        }).ToList();
            SavingGroupByRegionViewModelWithCount savingbyRegionwithcount = new SavingGroupByRegionViewModelWithCount();
            savingbyRegionwithcount.RgnResult = savingbyRegion.ToList();
            savingbyRegionwithcount.TotalAmount = savingbyRegion.Select(t => Convert.ToDecimal(t.PersonAmount)).AsEnumerable().Sum();
            savingbyRegionwithcount.TotalTownship = db.TB_PersonalInformation.Where(t => t.RegionID.Equals(id)).Select(t => t.RegionID).Distinct().Count();
            savingbyRegionwithcount.TotalRegion = db.TB_PersonalInformation.Where(t => t.RegionID.Equals(id)).Select(t => t.RegionID).Distinct().Count();
            savingbyRegionwithcount.TotalPerson = (from a in db.TB_AccountDetailTransaction join p in db.TB_PersonalInformation.Where(x => x.RegionID.Equals(id) && x.IsDeleted != true && x.IsMainPerson == true) on a.BankAccountNumber equals p.AccountNumber select a).Where(x => x.IsDeleted != true).Select(x => x.BankAccountNumber).Distinct().Count();
            return PartialView("_SavingGroupByRegionPartial", savingbyRegionwithcount);
        }

Моя модель представления

public class SavingGroupByRegionViewModelWithCount
    {
        public decimal TotalAmount { get; set; }
        public int TotalTownship { get; set; }
        public int TotalRegion { get; set; }
        public int TotalPerson { get; set; }
        public List<SavingGroupByRegionViewModel> RgnResult { get; set; }
    }
    public class SavingGroupByRegionViewModel
    {
        public string Name { get; set; }
        public string AccountNumber { get; set; }
        public string AccountType { get; set; }
        public string Address { get; set; }
        public string PersonAmount { get; set; }
    }

Я хочу, чтобы результат просмотра был таким

Мой результат просмотра

- Просмотр счета -

{Total Amount} {Total Person Count}

35000 , 2

- Сохранение просмотра списка лиц, которое я получил -

{No} {Name} {AccNum} {AccType} {Amount}

1, David, 001, JoinAcc, 10000

2, David, 001, JoinAcc, 15000

3, John, 002, SoloAcc, 10000

- Просмотр списка сохраняемых лиц Я хочу показать -

{No} {Name} {AccNum} {AccType} {Amount}

1, David, 001, JoinAcc, 25000

2, Join, 002, SoloAcc, 10000

Я хочу показать только имя учетной записи основного лица и номер счета с суммой суммы. Я думаю, что-то не так в моем запросе linq. Я попытался .distinct (), и это не решило. Я не знаю, как группировать. Я надеюсь, что кто-то может мне помочь. Спасибо

1 Ответ

0 голосов
/ 10 октября 2019

Заголовки и имена переменных на самом деле не совпадают, но просто сделав что-то вроде

savingbyRegion.GroupBy(x => new { Name = x.Name, No = x.AccountNumber, AccType=x.AccountType }).Select(x => new /*the model you're using*/ {No =x.Key.No,Name=x.Key.Name, PersonAmount=x.Sum(y=>y.Amount) /*Etc*/}); 

, вы получите

{No} {Name} {AccNum} {AccType} {Amount}

1, David, 001, JoinAcc, 25000

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