如何使用 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 | ___________________________________
___________________________________
因此,此解决方案部分有效。
知道吗?
泰
要生成除在 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);