【问题标题】:asp.net mvc querying from different table to viewasp.net mvc 从不同的表中查询以查看
【发布时间】:2013-05-11 13:01:44
【问题描述】:

我需要从 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.DbQuery1[&lt;&gt;f__AnonymousType95[System.String,System.String,System.String,System.String,System.DateTime]]', 但是这本字典需要一个类型的模型项 'System.Collections.Generic.IEnumerable`1[SeedSimple.Models.PrivateMessage]'。

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

【问题讨论】:

    标签: asp.net


    【解决方案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);
    }
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多