C# 无关实体

C# 无关实体,c#,asp.net-mvc,entity-framework,viewmodel,C#,Asp.net Mvc,Entity Framework,Viewmodel,我有一个通知列表 IList<notification> notifications = db.notification.ToList(); IList notifications=db.notification.ToList(); 每个通知都有一个与业务实体相关的业务id,但没有FK关系 我需要显示通知以及每个 通知1业务a 通知2业务a 通知3业务a 通知4业务b 通知5业务c 我对viewmodel做了类似的操作 public person person {get; s

我有一个通知列表

IList<notification> notifications = db.notification.ToList();
IList notifications=db.notification.ToList();
每个通知都有一个与业务实体相关的业务id,但没有FK关系

我需要显示通知以及每个

  • 通知1业务a
  • 通知2业务a
  • 通知3业务a
  • 通知4业务b
  • 通知5业务c
我对viewmodel做了类似的操作

public person person {get; set;}
public IList<notification> notifications {get; set;}
公众人物{get;set;}
公共IList通知{get;set;}
但是我能够在viewmodel中填充通知,因为我有一个个人id,我可以用它抓取具有该个人id的通知

在这种情况下,我没有一个notificationid来抓取业务,因为它是一个通知列表

IList<notification> notifications = db.notification.ToList();

有什么想法吗?

您可以加入两个列表。我在linqpad的飞行中一起抓取了这个。它很可能不代表您的模型1到1,因此您需要调整它。因为您有一个通知列表,所以我假设您也有一个业务列表,并创建了一个类似的模型。最重要的部分是:

//nList = List of Notifications | bList = List of businesses
var JoinedBusiness = from not in nList
                     join busi in bList
                     on not.BusinessId equals busi.Id 
                     select new { Notification = not.Name, Business = busi.Name };
如果需要强类型实体而不是匿名对象,则可能需要从中创建ViewModel

以下是完整的代码,您可以复制它(只需将其粘贴到linqpad中):

更改查询以返回新的ViewModel:

var JoinedBusiness = from not in nList
                     join busi in bList
                     on not.BusinessId equals busi.Id 
                     select  new BusiNotVM 
                     { 
                       Businesss = busi,
                       Notifications = not
                     };
这将为您提供以下输出: 每条水平线表示连接的实体;读:ID匹配。只需在视图中使用
model.Business.Name
model.Notifications.Name
请记住,还要更改视图期望的viewmodel模型:
@model Namespace.Folder.BusiNotVM
-玩得开心


我将如何在我的视图中提供此功能?它是匿名类型,如果可能的话,我希望它是强类型的。
var JoinedBusiness = from not in nList
                     join busi in bList
                     on not.BusinessId equals busi.Id 
                     select  new BusiNotVM 
                     { 
                       Businesss = busi,
                       Notifications = not
                     };