2017-11-08 6 views
1

안녕하세요 다른 레코드를 가져 오기 위해 아래 쿼리를 시도했지만 아래 쿼리에서 고유 레코드를 가져올 수 없습니다.linq 쿼리에서 고유 레코드를 얻는 방법

var query = (from sr in db.StudentRequests 
      join r in db.Registrations on sr.RegistrationId equals r.RegistrationId 
      join cc in db.Campus on r.CampusId equals cc.CampusId 
      join c in db.Classes on sr.ClassId equals c.ClassId 
      from tc in db.TutorClasses.Where(t => t.ClassId == sr.ClassId).DefaultIfEmpty() 
      from srt in db.StudentRequestTimings.Where(s => s.StudentRequestId == sr.StudentRequestId).DefaultIfEmpty() 
      from tsr in db.TutorStudentRequests.Where(t => t.StudentRequestId == srt.StudentRequestId && t.TutorId == registrationid).DefaultIfEmpty() 
      where tc.RegistrationId == registrationid 
      select new 
      { 
       StudentRequestId = sr.StudentRequestId, 
       RegistrationId = sr.RegistrationId, 
       Location = sr.Location, 
       PaymentMethod = sr.PaymentMethod, 
       CreatedOn = sr.CreatedOn, 
       ClassName = c.ClassName, 
       CampusName = cc.CampusName, 
       StatusId = tsr.StatusId == null ? 1 : tsr.StatusId, 
       Time = db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId) 
         .Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime) 
      }).Distinct().ToList().ToPagedList(page ?? 1, 3); 

하지만

'고유'작업으로 오류가 발생하고 지정된 인수의 수집 ResultType에 적용 할 수 없습니다 \ 연구 \ nParameter 이름 :. 인수

그래서 위의 쿼리에서 .Distinct()를 제거했고 그 코드 아래에 코드를 작성했습니다.

query = query.Distinct().ToList(); 

하지만 여전히 중복 기록은

enter image description here

그래서 나는 별개의 기록을 얻기 위해 GROUP BY 절을 시도했지만 거기 또한 내가 코드 아래 issue.Please 검토에 직면하고 보여주는데

query = query.ToList().GroupBy(x => new { x.StudentRequestId, x.StatusId, x.Location, x.RegistrationId, x.PaymentMethod, x.CreatedOn, x.ClassName, x.CampusName}) 
.Select(group => new 
{ 
    StudentRequestId = group.Key.StudentRequestId, 
    StatusId = group.Key.StatusId, 
    Location = group.Key.Location, 
    RegistrationId = group.Key.RegistrationId,          
    PaymentMethod = group.Key.PaymentMethod, 
    CreatedOn = group.Key.CreatedOn, 
    ClassName = group.Key.ClassName, 
    CampusName = group.Key.CampusName,         
    Time1 = group.Key.Time 
}); 

하지만 enter image description here

로 시간에 대한 오류를 얻고있다

어떻게 별개의 가치를 얻을 수 있습니까? 나는 모든 것이 잘 작동되는 열을 제거하면 또한, 내가 쿼리

실제 문제는 시간 열에서 오는에 ToPagedList을 사용하고 있다는 우려에서 확인하십시오.

+0

... GROUPBY()를 선택 (g => g.First()) .ToList().; –

+0

@ Rajaji는 나를 위해 일해 주셔서 감사합니다. – Xtremcool

답변

1

@Rajaji에서 제안한대로 쿼리의 끝에 Group by 절을 추가 했으므로 저에게 효과적이었습니다. 대신 고유 사용

var query = (from sr in db.StudentRequests 
      join r in db.Registrations on sr.RegistrationId equals r.RegistrationId 
      join cc in db.Campus on r.CampusId equals cc.CampusId 
      join c in db.Classes on sr.ClassId equals c.ClassId 
      from tc in db.TutorClasses.Where(t => t.ClassId == sr.ClassId).DefaultIfEmpty() 
      from srt in db.StudentRequestTimings.Where(s => s.StudentRequestId == sr.StudentRequestId).DefaultIfEmpty() 
      from tsr in db.TutorStudentRequests.Where(t => t.StudentRequestId == srt.StudentRequestId && t.TutorId == registrationid).DefaultIfEmpty() 
      where tc.RegistrationId == registrationid 
      select new 
      { 
       StudentRequestId = sr.StudentRequestId, 
       RegistrationId = sr.RegistrationId, 
       Location = sr.Location, 
       PaymentMethod = sr.PaymentMethod, 
       CreatedOn = sr.CreatedOn, 
       ClassName = c.ClassName, 
       CampusName = cc.CampusName, 
       StatusId = tsr.StatusId == null ? 1 : tsr.StatusId, 
       Time = db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId).Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime) 
       }).ToList().GroupBy(p => new { p.StudentRequestId }).Select(g => g.First()).ToList();