2012-03-09 2 views
1

에이 개체 데이터 소스를 처리 할 어디 다른 요소의 목록을 참조하는 필드를 사용할 수 있습니까? 보고 서비스

는 내가 객체 데이터 소스로이 LINQ를 설정할 수있는 하나 개의 데이터 집합을 사용하려고

 var gestiones = (from G in db.Gestion 
         where 
         G.IDTipificacion == idTipificacion 
         && (from T in db.Tipificacion where T.IdTipificacion == G.IDTipificacion select T.Servicio.IDServicio).AsEnumerable().Contains(idServicio) 
         select G).AsEnumerable().Select(xx => new GestionesDataSet() 
         { 
          GestionInicio = xx.HoraInicio, 
          GestionFin = xx.HoraFin, 
          @Tipificacion = ((from T in db.Tipificacion select T).Where(x => x.IdTipificacion == xx.IDTipificacion).Count() > 0 ? 
               (from T in db.Tipificacion where T.IdTipificacion == xx.IDTipificacion select T.Nombre).FirstOrDefault() : ""), 
          LlamadaInicio = xx.Llamada.HoraInicio, 
          LlamadaFin = xx.Llamada.HoraFin, 
          Login = xx.Llamada.Sesion.Usuario.Nombre, 
          campoValor = xx.CampoValor.Select(aux => new CamposGestion() { 
               Nombre = aux.ConfiguracionCampo.Campo.Nombre, 
               Valor = aux.Valor 
             }).ToList() 
         }).ToList(); 

그러나 나는보고한다 List 쇼를 포함하는 필드를보고 싶어하는 것은이

과 같은 오류가있어 enter image description here

도움을 주시면 감사하겠습니다. 당신이 돌출부 (선택)을 AsEnumerable가 호출 된 후, LINQ 탐색이 이미로드들에서 첫 번째 개체를 얻을하려고합니다를 호출 할 때

var gestiones = 
    from xx in db.Gestion 
    where 
    xx.IDTipificacion == idTipificacion 
    && (from T in db.Tipificacion 
     where T.IdTipificacion == xx.IDTipificacion select T.Servicio.IDServicio).AsEnumerable().Contains(idServicio) 
    select new GestionesDataSet() 
    { 
     GestionInicio = xx.HoraInicio, 
     GestionFin = xx.HoraFin, 
     @Tipificacion = (from T in db.Tipificacion where T.IdTipificacion == xx.IDTipificacion select T.Nombre).FirstOrDefault() ?? "", 
     LlamadaInicio = xx.Llamada.HoraInicio, 
     LlamadaFin = xx.Llamada.HoraFin, 
     Login = xx.Llamada.Sesion.Usuario.Nombre, 
     campoValor = xx.CampoValor.Select(aux => new CamposGestion() 
     { 
      Nombre = aux.ConfiguracionCampo.Campo.Nombre, 
      Valor = aux.Valor 
     }).ToList() 
    }).ToList(); 

:

답변

1

은이 같은 쿼리를 다시 작성합니다. 로드 된 객체가 없으면 프로젝션에 사용되는 각 탐색 속성에 대해 select SQL 명령을 실행합니다. [DeferredLoadingEnabled][1] 속성을 false으로 설정하면 쿼리를 실행하지 않고 이미로드 된 개체가없는 경우 (과 함께 "apriori"를로드 할 수 있음) NullReferenceException이 표시됩니다. 따라서 일부 상황에서는 AsEnumerable을 호출하면 성능이 저하 될 수 있습니다. 이 모든 것들은 이 에 사용 된 경우 부분에 유효하지 않습니다.

Tipificacion가 존재하지 않는 경우에는, 디폴트 값을주기 위해, 대신 테이블에 추가로 조회를 생성 Count 방법을 사용하는, C 번호로부터 상기 null-coalescing operator을 사용할 수있다.

지금 .. 문제가 있습니다.

SSRS는 항목 목록에 바인딩을 지원하지 않습니다. 열 campooValor은 허용되지 않는 개체 목록에 바인딩을 시도합니다. 따라서 subreport (there is a section which describes this)을 만들거나 데이터 (having the all the properties on one single object)를 병합 한 다음 HideDuplicates 속성

을 사용하십시오.