2015-11-10 70 views
0

我試圖在C#Asp.net MCV Web應用程序父表中的數據4.如何顯示使用該數據在子表在asp.net MVC 4

我在我必須根據表「ReadNotifs」中的數據顯示錶「數據通知」的數據。

爲了說明這個問題,以下是詳細信息:

我在我的數據庫中的兩個表:聲明和ReadNotifs。

Table : Notifications   Table : ReadNotifs 
--------------------------  -------------------------- 
|NotificationID | int |  |ReadNotifID | int | 
|description | string |  |userid   | int | 
|UserId   | int |  |NotificationID | int | 
__________________________  __________________________ 
  • 以上是相關機型:

    public class Notification 
    { 
        public Notification() 
        { 
         this.ReplyNotifs = new HashSet<ReplyNotif>(); 
        } 
    
        [Key] 
        public int NotificationID { get; set; } 
    
        [Display(Name = "Comment")] 
        public string description { get; set; } 
    
        public int UserId { get; set; } 
        public virtual UserProfile UserProfile { get; set; } 
    
        public virtual ICollection<ReadNotif> ReadNotifs { get; set; } 
    } 
    
    public class ReadNotif 
    { 
        [Key] 
        public int ReadNotifID { get; set; } 
    
        public int userid { get; set; } 
    
        public int NotificationID { get; set; } 
        public virtual Notification Notification { get; set; } 
    } 
    

聲明和ReadNotifs表由關係一對多的聯繫。所以1通知可以被讀取(ReadNotif)幾次。

我希望我能有這樣的結果:

Table : Notifications    Table : ReadNotifs 
----------------------------------- ----------------------------------- 
|NotificationID|description|UserId| |ReadNotifID|userid|NotificationID| 
|  1  | Post 1 | 50 | |  1  | 50 |  3  | 
|  2  | Post 2 | 51 | |  2  | 50 |  1  | 
|  3  | Post 3 | 52 | ___________________________________ 
|  4  | Post 4 | 53 | 
___________________________________ 

Result that i want to display in my view: 

Table : Notifications    
----------------------------------- 
|NotificationID|description|UserId| 
|  2  | Post 2 | 51 | 
|  4  | Post 4 | 53 | 
___________________________________ 

記住:我會在一表「的通知」的基礎上表中的「ReadNotifs」的數據顯示數據。 所以,我想在NotificationID(通知)!= NotificationID(ReadNotifs)時顯示通知。

任何想法我應該怎麼做?

非常感謝。

編輯:大家好。我試過的東西:

我的視圖模型:

public class NotificationVM 
{ 
    public ReadNotif ReadNotif { get; set; } 
    public List<Notification> Notifications { get; set; } 
} 

我的控制器:

UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName == User.Identity.Name); 

var listreadnotifs = db.ReadNotifs 
           //.Where(u => u.userid == user.UserId) 
            .ToList(); 

       if (listreadnotifs != null) 
       { 
        List<NotificationVM> result = new List<NotificationVM>(); 

        foreach (var item in listreadnotifs) 
        { 
         NotificationVM model = new NotificationVM(); 
         //model.ReadNotif = item; 
         model.Notifications = db.Notifications 
          .OrderByDescending(i => i.NotificationID) 
          .Where(u => !(u.NotificationID == item.NotificationID)) 
          .Take(99) 
          .ToList(); 

         result.Add(model); 

        } 
        return PartialView(result); 
       } 

筆者認爲:

@foreach (var beta in Model) 
    { 
     foreach (var item in beta.Notifications) 
     { 
      @item.description 
     } 
    } 

當我申請這個方法,讓我告訴你結果最後一個例子:

Table : Notifications    Table : ReadNotifs 
----------------------------------- ----------------------------------- 
|NotificationID|description|UserId| |ReadNotifID|userid|NotificationID| 
|  1  | Post 1 | 50 | |  1  | 50 |  3  | 
|  2  | Post 2 | 51 | |  2  | 50 |  1  | 
|  3  | Post 3 | 52 | ___________________________________ 
|  4  | Post 4 | 53 | 
___________________________________ 

Result : 

(i have this result)     (instead of this one) 
Table : Notifications     Table : Notifications 
-----------------------------------  ----------------------------------- 
|NotificationID|description|UserId|  |NotificationID|description|UserId| 
|  1  | Post 1 | 50 |  |  2  | Post 2 | 51 | 
|  2  | Post 2 | 51 |  |  4  | Post 4 | 53 | 
|  4  | Post 4 | 53 |  ___________________________________ 
___________________________________ 

所以這個解決方案部分工作。

有什麼想法?

+0

要清楚,您是否希望顯示來自'通知'的所有記錄,除了那些在'ReadNotifs'(即未讀通知)中具有相應記錄的記錄? –

+0

是的,一個理想? –

+0

有點像'var result = notifications.Where(n =>!readNotifs.Any(r => r.NotificationID == n.NotificationID));' –

回答

0

要生成所有Notifications的集合除在ReadNotifs中有相應記錄的那些(即,未讀通知),可以使用下面的查詢

List<Notification> unreadNotifications = db.Notifications 
    .Where(n => !db.ReadNotifs.Any(r => r.NotificationID == n.NotificationID)); 

邊注:它不是一個真正明確的是什麼ReadNotif財產的目的,是在您的視圖模型(你從來沒有在任何地方),因此它似乎沒有必要。您可以在視圖中創建模型@model List<Notification>

0

正如我從你的代碼見,最好的方法是使用「包括」在你的控制器方法是這樣的:

var notifs = db.ReadNotifs.Include(a => a.Notifications); 
     return View(notifs); 
+0

嗨,這是行不通的。看:https://gyazo.com/3490c66f3be0aa207c06f7247aa92cc1。請再次看到我的帖子,我將編輯我的帖子以顯示我正在嘗試的內容。 Ty –

+0

這是一個向您展示如何使用「include」的示例。檢查您的對象關係以更改該示例以適合您的代碼。 – Hadee

+0

或者您可能需要將代碼更改爲:var notifs = db.Notifications.Include(a => a.ReadNotifs); – Hadee

相關問題