2016-09-04 22 views
0

私はテーブルの出席があります表示合計MVC 4

public class Attendance 
    { 
     public virtual int AttendanceId { get; set; } 

     public virtual int UserCourseId { get; set; } 
     public virtual UserCourse UserCourse { get; set; } 

     public virtual int EventId { get; set; } 
     public virtual Event Event { get; set; } 

     public virtual int presence { get; set; } 
     public virtual bool check { get; set; } 
    } 

とテーブルコースへのUserProfileからユーザーを関連付けるテーブルUserCourses:

public class UserCourse 
    { 
     public virtual int UserCourseId { get; set; } 

     public virtual int UserId { get; set; } 
     public virtual UserProfile User { get; set; } 

     public virtual int CourseId { get; set; } 
     public virtual Course Course { get; set; } 

     public virtual List<Attendance> Attendance { get; set; } 
    } 

新しい出席者が作成され、チェックが真であればプレゼンスは1になり、チェックが偽であれば0に変わります。私は各ユーザのプレゼンスの総和を求め、ビューに表示する必要があります。データベース内

例:

User1 - 2 
User2 - 1 
User3 - 2 

私はこれをどのように操作を行うことができます。

User1 - Event1 - True - 1 
User2 - Event1 - False - 0 
User3 - Event1 - True - 1 
User1 - Event2 - True - 1 
User2 - Event2 - True - 1 
User3 - Event2 - True - 1 

だから、ビューでは、プレゼンスの合計数を示すだろうか? Shyjuさんのコメントとあなたの例のデータを使用して、@の延長のおかげ

+0

あなたは基本的に私はトンを返さないか、ユーザーIDと合計であなたの答えのための – Shyju

答えて

0

は、私が一緒にこれを置く:

var results = testData.GroupBy(user => user.UserId, 
           user => user.Attendance.Sum(a => a.presence), 
           (key, values) => "User" + key + " - " + values.First()); 

foreach (var result in results) 
{ 
    System.Console.WriteLine(result); 
} 

または

あなたがに必要な調整を行うことができるはずそのどちらも
var results = from user in testData 
       group user.Attendance.Sum(a => a.presence) by user.UserId into result 
       select "User" + result.Key + " - " + result.First(); 

foreach (var result in results) 
{ 
    System.Console.WriteLine(result); 
} 

をあなたが探しているものを得るために。

編集:あなたは、モデル内のメソッドで上記のロジックを入れて、型付きビューまたはタイプIEnumerable<string>の部分図を作成するためにそれを使用して、コントローラでそれを参照する必要があります。これを行うには、foreachループを削除し、その代わりにメソッドからresultsを返します。

ただし、IEnumerable<UserCourse>として、型付きビューまたは一部のビューを作成するには、あなたのニーズに応じて、それがより柔軟見つけるかもしれないし、このようなビューに直接オリジナルのロジックを置く:他の場所で、その後

@model IEnumerable<UserCourse> 

@{ 
    var results = from user in Model //Notice the reference to Model instead of testData 
        group user.Attendance.Sum(a => a.presence) by user.UserId into result 
        select "User" + result.Key + " - " + result.First(); 
} 

あなたはそれが必要な場合results変数と出力を参照することができますビューで:

<div> 
    @foreach (var result in results) 
    { 
     <p>@result</p> 
    } 
</div> 
+0

おかげで、ただ一つのことをGROUPBYを行う必要がありますビューに帽子の結果?コンソールの代わりに – dasdasd

+0

@dasdasd私はあなたのコメントに対処するために私の答えを更新しました。これが役立つ場合は、答えとしてこれを選択してください。 ;-) – Jaquez

関連する問題