2010-11-26 53 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; 
     } 
    } 

編譯器說,它不能轉換[布拉布拉] IQueryable的此類型(類型相似,但返回類型爲IQueryable)

回答

1

分組命令linq返回IEnumerable<IGrouping<TKey, TValue>>後,您期望它是IEnumerable<TimeSegment>
在您的例子,你可以從IList<TimeSegment>IEnumerable<IGrouping<Project, TimeSegment>>更改方法的返回類型,其中項目是timeSegment.Project
PS的類型:您可以更改IEnumerable數組或IList的(無論你想要的,只是不要忘了添加.ToArray().ToList()

+0

我試過了,但它也沒有工作,請參閱我上面的更新... – Anders 2010-11-26 10:54:53

相關問題