2012-05-07 16 views
0

毎日ユニークビジターの数を示すレポートが必要です。LINQを使用してMVCでレポートを作成

SELECT User.Name 
     ,Visit.VisitDate 
     ,COUNT(Visit.Id) AS NumOfVists 
FROM Visit JOIN User ON Visit.UserId = User.Id 
GROUP BY User.Name, Visit.VisitDate 

私はUser(テーブル)モデルとVisit(テーブル)モデルをコードファーストで作成しました。私はまた、これら2つのモデル(テーブル)を参照するdbcontextクラスを持っています。私のコントローラでは、このクエリの結果をビューに渡す必要があります。

まず、このレコードセットのMODELを作成する必要がありますか?はいの場合、名前、訪問日、NumOfVisitsという3つのメンバーを持つ、say、REPORTというモデルを作成しますか?

この場合、このクエリのLINQバージョンはどのように見えますか?どのようにビューに渡すのですか?

+2

それは本当に見えます。この問題を解決するように私たちに依頼していますが、私はあなたに疑念の恩恵を与え、MVCをまだ習っているとします。 –

答えて

0

クエリの結果を直接ビューに渡すことができます。あなたはそれのために余分なものを作る必要はありませんが、あなたがしたい場合はできます。ビューの使用にそれを渡す方法については

return View(your model); 
+0

私のモデルは何ですか?私の質問の結果はどんなタイプですか?ビューはモデルを受け入れるだけなので – ebeygin

+0

モデルは単なるオブジェクトであり、特別なものではありません。クエリの結果は、呼び出し方法によって異なります。それは、データセット、データレアアラー、匿名オブジェクト、カスタムオブジェクトから何でもかまいません。 クエリの結果を受け取ったら、別のオブジェクトに配置するか、単にビューに送信することができます。それを行う方法を決めるのはあなた次第です。それに対する答えは一つもありません。 質問を実行するために出てくるLINQコードまたはADOコードを投稿してください。そうすれば、あなたの質問によく答えることができます。 –

1

それはあなたの正確なスキーマを知らずに言うのは難しい、またはどのように結果を配置することにしたいが、私はそれのLINQのバージョンのようなものになるだろうと思います。

from u in User 
from v in u.Visit 
group v by new { u.Name, v.VisitDate } into g 
select new {g.Key.Name, g.Key.VisitDate, Count = g.Count()}; 

これは、あなたxは3人のメンバーと匿名型であるIEnumerable<x>結果、得られます:文字列、日時、およびて、Int。あなたは、このためのViewModelを作成する必要はありませんが、あなたは、あなたがしたいことができる場合に:あなたはこの自分で解決しようとしていないよう

from u in User 
from v in u.Visit 
group v by new { u.Name, v.VisitDate } into g 
select new MyViewModel 
{ 
    Name = g.Key.Name, 
    VisitDate = g.Key.VisitDate, 
    Count = g.Count() 
}; 
+0

ありがとうございますが、LINQ式の最初の2行は正しいですか?ユーザーと訪問の両方がテーブルなので... u.Visitはどのように存在しますか?ここまでは私がこれまでに持っていたものです。最初の2行について:ユーザのuから join vでの訪問v.U.Idとv.UserIdのjへの訪問..どのようにグループ化部分とそれを接続しますか? – ebeygin

+0

@ebeygin - だから私はそれがあなたのスキーマによって異なると言います。 Userオブジェクトに訪問のコレクションが含まれている場合は、この方法で行う必要があります。それ以外の場合は、2行目を 'u.Idと同じ訪問v.UserId'の' join v 'に置き換えてください。 –

+0

@ebeygin - コメントの編集、新しいバージョンを参照してください。 –

関連する問題