2013-05-11 225 views
0

我需要从2表中查询数据asp.net的MVC查询,查看

public class UserProfile 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Name { get; set; } 
} 

public class PrivateMessage 
{ 
    public int MessageId { get; set; } 
    public string Sender { get; set; } 
    public string Receiver { get; set; } 
    public string Subject { get; set; } 
    public string Message { get; set; } 
    private DateTime _date = DateTime.Now; 
    public DateTime sentDate { get { return _date; } set { _date = value; } } 
} 

,这就是我想我的控制器上

public ActionResult Index() 
    { 
     var x = User.Identity.Name; 
     var query = from p in db.PrivateMessages 
        join u in db.UserProfiles on p.Sender equals u.UserName 
        where p.Receiver == x 
        select new 
        { 
         u.UserName, 
         u.Name, 
         p.Receiver, 
         p.Subject, 
         p.Message, 
         p.sentDate 
        }; 

     return View(query); 
    } 

这是我的观点模型

@model IEnumerable<SeedSimple.Models.PrivateMessage> 

但我得到这个误差

传递到词典中的模型产品 类型的“System.Data.Entity.Infrastructure.DbQuery 1[<>f__AnonymousType9 5 [System.String,System.String,System.String, System.String,System.DateTime]]', ,但此字典需要一个 类型的模型项'System.Collections.Generic.IEnumerable`1 [SeedSimple.Models.PrivateMessage]'。

我要的是从UserProfile表和接收器,主题,邮件和sentDate获取用户名和名称上PrivateMessage

回答

1

那么你传递作为一种模式的又一个匿名类型,你有一个强类型视图。 您可以创建一个新的ViewModel,其中包含您用于查询的所有字段并传递该字段,也可以传递ViewBag中的所有属性(而不是漂亮的解决方案)。

编辑

想我给你举个例子。 下面是一个包含你所需要的数据一个ViewModel:

public class MessageViewModel 
{ 
    public string UserName { get; set; } 
    public string Name  { get; set; } 
    public string Receiver { get; set; } 
    public string Subject  { get; set; } 
    public string Message  { get; set; } 
    public DateTime SentDate { get; set; } 
} 

在你看来:

@model IEnumerable<SeedSimple.Models.MessageViewModel> 

在你的控制器:

public ActionResult Index() 
{ 
    var x = User.Identity.Name; 
    var result = from p in db.PrivateMessages 
       join u in db.UserProfiles on p.Sender equals u.UserName 
       where p.Receiver == x 
       select new MessageViewModel 
       { 
        UserName = u.UserName, 
        Name  = u.Name, 
        Receiver = p.Receiver, 
        Subject  = p.Subject, 
        Message  = p.Message, 
        SentDate = p.sentDate 
       }; 

    return View(result); 
} 

我希望这有助于。

+0

Ooops,一个错字,谢谢Solmead :) – 2013-05-11 15:36:48

+0

非常感谢你:) – Ray 2013-05-12 01:28:21