2011-03-15 92 views
0

后,我有这样的代码:如何打印加入LINQ查询

public ActionResult Index() 
{ 


     MembershipUser currentUser = Membership.GetUser(); 
     Guid UserId = (Guid)currentUser.ProviderUserKey; 
     var users = from m in db.Users 
        join m2 in db.MyProfiles on m.UserId equals m2.UserId 
        where m.UserId == UserId 
        select new{UserName = m.UserName, LastActivityDate = m.LastActivityDate, 
         Address = m2.Address, City = m2.City, State = m2.State, Zip = m2.Zip}; 
     return View(users); 

} 

此代码是在我的控制,我想运行此查询,然后将结果打印成我的看法,我会怎么写视图?

回答

0

此代码无法工作,因为您的LINQ查询正在返回一个匿名对象,因此您无法强烈键入您的视图。所以第一步是定义,这将代表你愿意显示在您的视图中的信息视图模型:

public class UserViewModel 
{ 
    public string UserName { get; set; } 
    public DateTime LastActivityDate { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
} 

然后在你的控制器动作,您将回到这个视图模型的集合:

在强类型视图
public ActionResult Index() 
{ 
    var currentUser = Membership.GetUser(); 
    var userId = (Guid)currentUser.ProviderUserKey; 
    var users = 
     from m in db.Users 
     join m2 in db.MyProfiles on m.UserId equals m2.UserId 
     where m.UserId == userId 
     select new UserViewModel 
     { 
      UserName = m.UserName, 
      LastActivityDate = m.LastActivityDate, 
      Address = m2.Address, 
      City = m2.City, 
      State = m2.State, 
      Zip = m2.Zip 
     }; 
    return View(users); 
} 

最后:

@model IEnumerable<AppName.Models.UserViewModel> 
@Html.DisplayForModel() 

,并在其中将呈现为相应的显示模板(~/Views/Shared/DisplayTemplates/UserViewModel.cshtml)收集的每个项目:

@model AppName.Models.UserViewModel 
<div> 
    Username: @Html.DisplayFor(x => x.UserName)<br/> 
    Last activity: @Html.DisplayFor(x => x.LastActivityDate)<br/> 
    ... 
</div> 
0

您需要获取用户类型并制作该类型的列表视图。只需在控制器方法中右键单击并选择“创建视图”,即可轻松制作视图。这将确保路由正常完成。

1
//if your question is how to display(Print!) a view for above query then in ActionResult Index() 
    //1] As as best practise always Create a ViewModel - UserViewModel 
     public class UserviewModel 
     { 
     public string Username {get;set;} 
     public string Address {get;set;} 
     } 

    //2] Assign db.user values to UserviewModel or you can use Automapper 

    //and 3] then return this viewmodel to view 
    return View(UserviewModel);