>

연결하려는 두 테이블의 행을 곱하기 때문에 join 문에 많은 도움이 필요합니다.

내 샘플 데이터 :

SAPId CompendiumId Seats
----- ------------ -----
1     443          21
2     443          22
3     443          23
4     443          24
5     443          25
6     571          25
7     352          20
QBId  CompendiumId  Slots
----- ------------ -----
1     443          26
2     443          27
3     571          25
4     571          23

원하는 결과는 :

CompendiumId Seats Slots
------------ ----- -----
443          115   53
571          25    48
352          20    0

그러나 내 코드의 결과는 다음과 같습니다.

CompendiumId Seats Slots
------------ ----- -----
443          230   265
571          50    48

여기서 일어나는 일은 빨간색으로 강조 표시된 셀이 복제 된 셀입니다.

내 코드는 다음과 같습니다 :

컨트롤러

   private MyContext db = new MyContext();
    public ActionResult Index()
    {           
        var sapsummarylist = (from cmp in db.Compendia
                              join sp in db.SAPs on cmp.Id equals sp.CompendiumId
                              join qb in db.QualificationBatches on cmp.Id equals qb.CompendiumId
                              group new { cmp.Id, sp.Seats, qb.Slots } by new { cmp.Id } into mgrp
                              from grp in mgrp.DefaultIfEmpty()
                              select new SAPSummaryViewModel
                              {
                                  Id = grp.Id,
                                  Seats = mgrp.Sum(x => x.Seats),
                                  Slots = mgrp.Sum(x => x.Slots)
                              });
        return View(sapsummarylist.Distinct());  
    }

모델

public class Compendium
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<QualificationBatch> QualificationBatches { get; set; }        
    public virtual ICollection<SAP> SAPs { get; set; }
}

public class QualificationBatch
{
    public int Id { get; set; }
    public int CompendiumId { get; set; }
    public int Slots { get; set; }
    public virtual Compendium Compendium { get; set; }
}
public class SAP
{
    public int Id { get; set; }
    public int CompendiumId { get; set; }
    public int Seats { get; set; }
    public virtual Compendium Compendium { get; set; }
}

ViewModel

public class SAPSummaryViewModel
    {        
        public int Id { get; set; } //Compendium
        public int Slots { get; set; } //QualificationBatch
        public int Seats { get; set; } //SAP
    }


  • 답변 # 1

    다음 코드가 도움이 될 것입니다.

    var sapsummarylist = (from sp in Saps
                          group sp by new { sp.CompendiumId } into grp
                          select new SAPSummaryViewModel
                          {
                             Id = grp.FirstOrDefault().CompendiumId,
                             Seats = grp.Sum(x => x.Seats),
                             Slots = QualificationBatches.Where(x=>x.CompendiumId == grp.FirstOrDefault().CompendiumId).Sum(x => x.Slots)??0
                          });
    
    

  • 이전 php - SSL 리디렉션 htaccess가 작동하지 않습니다
  • 다음 php - Laravel 마이그레이션 onDelete 제한 작동하지 않음