Группировка неприятностей - PullRequest
1 голос
/ 03 июля 2011

Привет, у меня трудности с группировкой этих данных, так как они не имеют функции агрегирования. У меня есть следующие данные в 2 таблицах, и я хотел бы присоединиться как по PaymentId, так и display only 1 row of record.

enter image description here

Вопрос:
Как отобразить окончательный результат только в 1 ROW groupby CoursePaidForMonthYear.
Я хотел бы получить все данные от Payment.*, TutorCourseCommissions.* and CoursePaidForMonthYear column in same row displaying (September, October, November)

Пример:

referenceId| TutorId| CoursePaidForMonthYear                 |  
1          | 1019   | September, October, November OR 9,10,11|

Моя работа:

 var result = from u in db.Users
                    join p in db.Payments on u.Id equals p.UserId
                    join tt in db.TutorCourseCommissions on p.Id equals tt.PaymentId into gtt
                        from tt in gtt.DefaultIfEmpty()                       
                    where u.Id == user.Id
                    GroupBy tt.CoursePaidForMonthYear  ??
                    select new { u, p, tt };

            foreach (var r in result)
            {
                Payment payment = new Payment();                  
                payment.MonthToPay = (r.tt == null) ? null : common.GetMonthName(r.tt.CoursePaidForMonthYear.Month, true);
                payment.Amount = r.p.Amount;                    

                output.Add(payment);
            }
            return output;

Ответы [ 2 ]

1 голос
/ 03 июля 2011

Вам нужно сгруппировать месяцы по пользователю и оплате, а затем выполнить агрегирование по сгруппированным месяцам. В этом случае я использовал String.Join (), чтобы объединить отдельные месяцы, приходящиеся на комиссию.

Это даст вам результаты в соответствии с { User = "John Doe", Payment = ..., Months = "January, February" }

var result = from u in db.Users
              where u.UserID == user.Id
              join p in db.Payments on u.Id equals p.UserId
              join comm in db.TutorCourseCommissions 
              on p.Id equals comm.PaymentId
              group common.GetMonthName(comm.CoursePaidForMonthYear,true)
              by new { User = u, Payment = p } into g
              select new 
              {
                 User = g.Key.User,
                 Payment = g.Key.Payment,
                 //...select out other properties here... 
                 Months = String.Join(", ", g.Distinct())
              };
0 голосов
/ 03 июля 2011

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

Как

public TutorPayments
{

 public int UserID{
 get;
 set;
}

 public int PayType{
 get;
 set;
  }

  public int TutorID{
  get;
 set;
  }

 //and so on all columns property that you required
}

теперь вы можете получить все это в своем запросе, создав его экземпляр таким образом

   var result = from u in db.Users
                join p in db.Payments on u.Id equals p.UserId
                join tt in db.TutorCourseCommissions on p.Id equals tt.PaymentId into gtt
                    from tt in gtt.DefaultIfEmpty()                       
                where u.Id == user.Id
                GroupBy tt.CoursePaidForMonthYear  ??
                select new TutorPayments {UserID =  u.id,PayType = p.id,TutorID = tt.TutorId, ............ };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...