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

今、これが失敗し、結果がコンパイラに応じて、リストに変換することはできませんので。私はこの表現が私にコレクションのコレクションを与えるだろうと思って、私はこれを返すことができ、コントローラで取得し、表示のためにビューに渡すことができると思いました。どうやらない。

どうすればよいですか?誰でも私に正しいタイプを返す方法を教えてもらえれば、また、ビューがそれを受け取り、それをProjectで分類して表示する方法の例を私にも与えることができれば、本当にありがとう!

EDIT:これは(以下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

グループバイコマンドlinqがIEnumerable<IGrouping<TKey, TValue>>を返した後に、それがIEnumerable<TimeSegment>であると予想されます。あなたの例では
あなたはプロジェクトtimeSegment.Project
PSのタイプであるIEnumerable<IGrouping<Project, TimeSegment>>IList<TimeSegment> から、あなたのメソッドの戻り値の型を変更することができます:あなたは.ToArray()を追加することを忘れないでください、あなたが望むどの(配列またはIListのにIEnumerableを変更することができますまたは.ToList()

+0

私は試しましたが、どちらもうまくいきませんでした。上記の私のアップデートを参照してください... – Anders

+0

私の間違いの申し訳ありませんが、更新を参照してください。戻り値の型はIEnumerable > –

+0

ありがとうございました。 – Anders

関連する問題