如何使用 MVC 4 中的子表中的数据显示父表的数据 asp.net

本文关键字:数据 显示 net asp 何使用 MVC | 更新日期: 2023-09-27 18:21:20

我正在尝试用 C # Asp.net mcv 4 制作一个 Web 应用程序。

我处于必须根据表"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"中的数据在"通知"表中显示数据。所以,我想在通知ID(通知(!=通知ID(读取通知(时显示通知。

知道我应该怎么做吗?

谢谢。

编辑:大家好。 我尝试了一些东西:

我的视图模型 :

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  |     ___________________________________
___________________________________ 

因此,此解决方案部分有效。

知道吗?

如何使用 MVC 4 中的子表中的数据显示父表的数据 asp.net

要生成除在 ReadNotifs 中具有相应记录(即未读通知(之外的所有Notifications的集合,可以使用以下查询

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

旁注:在您的视图模型中,ReadNotif属性的用途并不十分清楚(您从未在任何地方设置过它(,因此似乎没有必要。您可以在视图中制作模型@model List<Notification>

正如我从您的代码中看到的那样,最好的方法是在您的控制器方法中使用"include",如下所示:

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