0

我需要从 2 个表中查询数据

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__AnonymousType95[System.String,System.String,System.String,System.String,System.DateTime]]”,但此字典需要'System.Collections.Generic.IEnumerable`1[SeedSimple.Models.PrivateMessage]' 类型的模型项。

我想要的只是从表和接收者、主题、消息和表UserProfile上的 sentDate获取用户名和名称PrivateMessage

4

1 回答 1

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);
}

我希望这有帮助。

于 2013-05-11T13:35:49.003 回答