首页 > 解决方案 > 如何将模型类型转换为另一个模型并显示到视图

问题描述

我有一个名为 Cars 的对象,它有一些链接元素,我想通过类型转换来正确显示它们。

Car()
{
   Id {get ; set;}
   Name {get ; set;}
   SpareParts{ get; set;}
}

SpareParts()
{
   CarId{get; set;}
   Car{get;set;}
   SparePart{get; set;}
   SparePartId {Get;set;}
}

但是 SparePart Link 项目原始模型如下所示

SparePart()
{
   Id{get; set;}
   Name { get; set; }
   Description { get; set; }
   ParentId { get ; set;}
}

而且我有单独的视图功能(使用 Db 视图操作,这个视图是使用父 ID 创建的,将生成名称的完整路径)

SparePartView : SparePart
{
ParentName {get;set;}
}

例如,如果 SparePart 1 是 Break 并且它的父级是 Clutch,那么父级名称将是“Clutch\Break”

因此,在显示主对象时,我有 SpareParts 对象和 Sparepart 链接,但我没有 SparePart 视图,我需要显示该名称和完整的父级详细信息。

因此,如果我什至通过获取备件的 ID 从数据库中单独获取,那么我需要正确映射视图(Razor 引擎)中的原始项目。

如何在没有这么多 for 或 for each 循环的情况下执行此操作。

如果问题不清楚或需要更多示例,请在此处发表评论,我很乐意提供此类详细信息。

ExporttoView()
{
var cars = carRepository.GetCarsForExport(SearchParameters);
_carRepository.LoadSpareObjects(cars) 
}

现在 Cars 对象将加载汽车实体列表和映射到它的 SpareObjects 列表。

例如: Car[0] 将如下所示

Id - 1
Name - BMW
SpareParts{CarId=1, Car - CarObject, SparePart(Id,Name,Description,ParentId), SparePartId}

但是当我要查看时,我需要显示全名。为了获得备件的全名,我可以进行 db fetch。

var fullnameobjects = _SpareRepository.Get(Sparepart.Ids) // This will fetch full name of the list of spare parts objects.

我想在下面的视图中显示它。

Name : CarName,
Id : ID,
SparePartFull Name : Full path of the name for the spare parts.

我可以通过执行 foreach 循环来实现这一点

Foreach(var item in Spareparts)
   {
   foreach(var name in fullnameListitems)
     {
      if(item.Id == name.Id)
      FullName= name.FullName
     }
   }

标签: c#asp.net-mvc

解决方案


我只是按照上面的评论修改了获取备用项目的 Reportsitory 方法。由于它是从 SpareObject 继承到 SpareObjectView 的相同对象,因此允许默认类型转换。

  var SpareobjectsViews = _spareRepository.GetSpareViews(CarIds).ToDictionary(x => x.Id + ":" + x.ProdId, x => x);

以这种方式将其分配给 Car Object。

Cars.SpareObject = SpareObjectViews;

在视图中,我已经修改了这样的代码。

Cars.SpareObject as SpareObjectsView

SpareName = Cars.SpareObjectViewName

推荐阅读