1

我想從3個表中顯示選擇性信息。 我已經嘗試過DTO,但無法表示視圖中的數據。 我也嘗試過使用匿名類型,但無法將其投影到InboxViewModelDTO類型的模型。無法將匿名類型投影到模型類型。 (實體或複雜類型不能在LINQ to Entities查詢中構建。)

下面是ActionResult的,

public ActionResult Inbox() 
    { 
     IEnumerable<InboxViewModelDTO> model = null; 

     AccountDbContext db = new AccountDbContext(); 
     int? currentUserID = 0; 
     currentUserID = Convert.ToInt32(Session["UserId"]); 

     model = (from a in db.rommateDatabase 
         join b in db.userAccounts on a.UserID equals b.UserId 
         join c in db.messaging on b.UserId equals c.FromUserID 
         where b.UserId == currentUserID 
         select new InboxViewModelDTO() 
         // select new 
         { 
          UserID = b.UserId, 
          FirstName = b.FirstName, 
          LastName = b.LastName, 
          RequestID = a.ID, 
          MessageMail = c.MessageMail 
         }).ToList(); 
     return View(model); 
    } 

我創建了一個DTO類

public class InboxViewModelDTO 
{ 
    [Key] 
    public int MessageID {get;set;} 
    public int UserID { get; set; }  
    public string FirstName { get; set; }   
    public string LastName { get; set; }   
    public int RequestID { get; set; }  
    public string MessageMail { get; set; } 
} 

這裏是查看

@model List<RegistrationLogin.Models.InboxViewModelDTO> @foreach (var 
item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserID) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.FirstName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.LastName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.RequestID) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.MessageMail) 
     </td> 
    </tr> 

回答

0

試試這個,

model = (from a in db.rommateDatabase 
         join b in db.userAccounts on a.UserID equals b.UserId 
         join c in db.messaging on b.UserId equals c.FromUserID 
         where b.UserId == currentUserID 
         select new 
         { 
          UserID = b.UserId, 
          FirstName = b.FirstName, 
          LastName = b.LastName, 
          RequestID = a.ID, 
          MessageMail = c.MessageMail 
         }).AsEnumerable().Select(x => new InboxViewModelDTO { 
          UserID = x.UserID , 
          FirstName = x.FirstName , 
          LastName = x.LastName, 
          RequestID = x.RequestID , 
          MessageMail = x.MessageMail 
         }).ToList(); 
+0

明白了。謝謝Jitendra :) –

相關問題