2017-07-06 19 views
0

ユーザーは、2つのモデル(データベーステーブル)(ユーザーとリクエスト)の情報を含むフォームを送信します。また、データは、UserIDによって結合されて一緒にリストされる必要があります。つまり、すべてのユーザーまたは特定のユーザーによって作成されたすべての要求を一覧表示する必要があります。したがって、両方のテーブルからデータを出力する必要もあります。ASP.NET MVC - 2つのモデルを同時に表示するためのViewModel

私の解決策は、これらのモデルの両方を含むUserRequestsというViewModelを作成することでしたが、私は実装に固執しています。

public class UserRequestModel { 
    public User User1 { get; set; } 
    public Request Request1 { get; set; } 

を要約すると、コントローラのインデックス()関数が何をするか、すべてのユーザーによるリクエストのクエリを取得し、両方のテーブルからすべてのフィールドをリストである:それは次のようになりますかどうかはわかりません(参加)。ですから、どういうわけか、そのクエリからのデータをViewModelに取り込んで出力する必要があり、そうするためにViewModelを設定する方法がわかりません。どんな洞察にも感謝します。ありがとう!

あなただけの2つのテーブルを結合するためにLINQを使用して、何かのようにように、あなたのターゲットビューモデルにレコードを投影することができ
+2

はい、これは良い解決策です...あなたはそれがそうではないと思いますか? – Milney

+0

これは知っておきたいことです。私の質問は、ViewModelにそのクエリデータをどのように出力するのですか? –

+0

これは、データアクセスがどのように行われるかによってまったく異なります... ORMを使用していますか?エンティティフレームワーク? Linq? Dapper?プレーンSqlCommands?一度あなたは、例を得るかもしれないことを決めたが、データベースからデータを取得する方法はあまりにも広すぎる答えがここに....私のASP MVCデータベースを試して、チュートリアルまたは2つを読む... – Milney

答えて

1

var res = 
    from u in Users 
    join r in Requests on u.UserId equals r.UserId 
    select new UserRequestModel { User1 = u, Request1 = r}; 

あなたがデータベーステーブルをマッピングするために(例えばEntity Frameworkの)ORMを使用しています?

+0

私はEntity Frameworkを使用しています。これはまさに私が探していて、完璧に働いたものです。どうもありがとうございます! –

+0

すべての人に最後の行を追加するだけです。 "return View(res);" –

0

ViewModelは、データの表示に役立つように設計する必要があります。ビューごとに1 ViewModelルールに従うことをお勧めします。 まず、ビュー内のデータの表現方法を明確に設計する必要があります。あなたのViewModelが正確に表現したいものかどうかはわかりません。 1件のリクエストとすべてのユーザーに関連して表示しますか?または1人のユーザーとすべての要求が関連していますか?または、多くのユーザーと関連した多くのリクエストが必要ですか?

必要に応じて、ViewModelを作成する必要があります。 1人のユーザーと多くのリクエストが必要な場合、ユーザークラス内にリクエストリストがあるとします。

0

私が考えることができるのは、1つのユーザーと1つのリクエストだけです。あなたのポストの継ぎ目には複数のものがあるようです。

あなたが好きなものに応じてリスト、IEnumerablesまたは配列にプロパティを変更し、データベースから投稿を取得するときにToList()、ToArray()などを作成します。

public class UserRequestModel { 
    public List<User> Users { get; set; } 
    public List<Request> Requests { get; set; } 
} 

データを取得するときは、好きな拡張方法を使用します。

var Users = dbcontext.Users.Where(x => x.ex == example).ToList() 
関連する問題