2010-11-26 2 views
0

범주 아래에 그룹화 된 데이터베이스의 데이터를 표시 할 수있게하려고합니다. 응용 프로그램은 작업 표 응용 프로그램에서 시도입니다.항목을 Linq로 그룹화하고 MVC보기의 표에 표시합니다.

(table) TimeSegments 
TimeSegmentID 
Hours 
Date 
ConsultantID (FK) 
TaskID (FK) 
ProjectID (FK) 

(table) Projects 
ProjectID 
ProjectName 

(table) Tasks 
TaskID 
TaskName 

(table) Consultants 
ConsultantID 
ConsultantName 

내가 모델 (여기라는 TS)에서 데이터를 얻고 표시 할 수 있습니다,하지만 난 프로젝트와 작업하여 시간을 표시 할 수 있도록 그룹화 싶은 : 데이터베이스 스키마는 다음과 같습니다. 지금까지 내 시도가 있습니다. 나는 Linq에의 그룹 문이 적절할 것 짐작하지만 맞습니다 나도 몰라 :

public IList<TimeSegment> TimeSegmentsByProject 
    { 
     get 
     { 
      var projectGroups = from timeSegment in ts.TimeSegments 
           group timeSegment by timeSegment.Project 
           into projectGroup 
           select projectGroup; 
      return projectGroups.ToList(); //Doesn't work 
     } 
    } 

지금이 실패를, 결과는 컴파일러에 따라리스트로 변환 할 수 있기 때문이다. 나는이 표현이 내게 컬렉션 컬렉션을 줄 것이라고 생각했고, 이것을 반환하고 컨트롤러에서 가져 와서 뷰를보기 위해 전달할 수있을 것이라고 생각했습니다. 명백하게.

그럼 어떻게해야합니까? 누구든지 올바른 유형을 반환하는 방법을 보여줄 수 있고, 또한보기가 프로젝트를 수신 할 수있는 방법을 보여주고 프로젝트별로 분류하여 표시하는 것이 바람직하다면 정말 감사하겠습니다.

편집 :

이 (아래 The_Smallest에 의해 제안 복귀 형) 중 하나를 작동하지 않습니다

public IGrouping<Project, TimeSegment> TimeSegmentsByProject 
    { 
     get 
     { 
      var projectGroups = from timeSegment in ts.TimeSegments 
           group timeSegment by timeSegment.Project 
           into projectGroup 
           select projectGroup; 
      return projectGroups; 
     } 
    } 

컴파일러는 유형이 유사 (이러한 유형의 [blabla]에 IQueryable로 변환 할 수 없습니다 말한다 반환 유형은 IQueryable입니다.

답변

1

IEnumerable<TimeSegment>이 될 것으로 예상되는 반면에 group-by 명령 linq은 IEnumerable<IGrouping<TKey, TValue>>을 반환합니다. 프로젝트 timeSegment.Project
PS의 유형은 당신이 IList<TimeSegment> IEnumerable<IGrouping<Project, TimeSegment>>로에서 방법의 반환 유형을 변경할 수 있습니다 예에서
: 당신은 배열 또는 당신이 원하는 어느 IList의 (에 IEnumerable을 변경할 수 있습니다, 단지 .ToArray()을 추가하는 것을 잊지 마세요 또는 .ToList())

+0

위의 업데이트를 참조하십시오. – Anders

+0

실수로 죄송합니다. 업데이트를 참조하십시오. 반환 형식은 IEnumerable 여야합니다. > –

+0

감사합니다. 이제 효과가있었습니다. – Anders

관련 문제