0

私はMVCを使用してサンプルのasp.netプロジェクトに取り組んでいますが、私のデータベースは変更できないライブデータベースです(技術的にはこのデータベースのテストバージョンですが、データベースへの変更は不可能です) 。

asp_UsersテーブルのUserIDを使用して、システムのさまざまな側面に変更を加えたユーザーを保存し、さまざまなフロントエンドテーブルにユーザー名を表示し始めたいのですが、テーブルをリンクしてこのユーザー名を取得するにはどうすればよいですか?

明確にするために、システム全体のいくつかのテーブルに対してこれを実行したいので、LINQを使用して実行できることを望んでいました。

結合クエリを使用して必要な情報を取得できますが、これをビューに渡して使用するにはどうすればよいですか?

        var plans = from users in db.aspnet_Users
                           join import in db.Plan_Imports
                           on users.UserId.ToString()
                           equals import.User_ID

                           select new
                           {
                               Date = import.Date,
                               UserName = users.UserName
                           };

サンプルテーブル

asp_Users

ユーザーID

ユーザー名

..。

表1

ID

field1

field2

..。

User_ID<---asp_Usersへの参照

表2

ID

field1

field2

..。

User_ID<---asp_Usersへの参照

4

2 に答える 2

0

Shyjuによって提供されたソリューションは完全に機能し、実行するのはそれほど複雑ではありませんでしたが、この場合、コードが単純な呼び出しであるはずのコードが手に負えなくなっていたため、LINQの使用は適切ではないと判断しました。

代わりに、ストアドプロシージャを使用して情報を取得し、それを複雑なオブジェクトに保存して、ビューに渡しました。

上記のコードがちょうどなったので、コードは今でははるかにすっきりと管理しやすくなっています

var plans = db.SP_SelectImports();  

ストアドプロシージャのマッピングについて詳しくは、http://dotnet.dzone.com/news/mapping-stored-procedureをご覧ください。

于 2012-09-10T15:25:48.000 に答える
0

ビューごとにViewModelを作成します。

ViewModel は単なる POCO クラスです

public class PlanViewModel
{
  public string UserName { set;get;}
  public DateTime ImportDate { set;get;}
}

次に、クエリから LINQ プロジェクションを使用して、この ViewModel/ViewModel のコレクションにデータを取得します。

public ActionResutl Show()
{
   var plans = (from users in db.aspnet_Users
                           join import in db.Plan_Imports
                           on users.UserId.ToString()
                           equals import.User_ID

                           select new PlanViewModel
                           {
                               ImportDate = import.Date,
                               UserName = users.UserName
                           }).ToList();
   return View(plans);    
}

次に、ビューをコレクションに強く型付けしましょうPlanViewModel

@model List<PlanViewModel>
@foreach(var plan in Model)
{
  <p>@plan.UserName</p>
  <p>@plan.ImportDate.ToString()</p>
}
于 2012-09-07T15:50:33.980 に答える