2013-05-11 275 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