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

用户身份

用户名

...

表格1

ID

字段1

字段2

...

User_ID <--- 引用 asp_Users

表2

ID

字段1

字段2

...

User_ID <--- 引用 asp_Users

4

2 回答 2

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 回答
0

Shyju 提供的解决方案运行良好,而且操作起来并不复杂,但是我认为在这种情况下我认为使用 LINQ 不合适,因为对于应该是一个简单的调用,代码已经失控了。

我所做的是使用存储过程来获取信息,并将其保存到我传递给我的视图的复杂对象中。

代码现在更整洁,更易于管理,因为上面的代码变得只是

var plans = db.SP_SelectImports();  

在此处阅读有关存储过程映射的更多信息:http: //dotnet.dzone.com/news/mapping-stored-procedure

于 2012-09-10T15:25:48.000 回答