c# - 如何将模型类型转换为另一个模型并显示到视图
问题描述
我有一个名为 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
}
}
解决方案
我只是按照上面的评论修改了获取备用项目的 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
推荐阅读
- java - 如何在迭代和检查对象的另一个 ArrayList 时将实体值更新为 ArrayList 中的对象
- arrays - 我正在运行 opencv 代码并收到此错误 ValueError: The truth value of an array with more than one element is ambiguous。使用 a.any() 或 a.all()
- c# - 如何使用 GraphicsPath 绘制形状以创建自定义控件的区域?
- assembly - 我应该如何在程序集 8086 中命名我的标签
- python - 如何通过 ManyToManyField 检索 django 模板中的 .count
- reactjs - React Native 在 https 请求上从 REST api 获取数据错误
- c# - 使用 InMemoryDatabase 返回计数为 0 的 NUnit 测试
- angular - 如何使用 Angular 路由器模块在 Ionic 5 中显示选项卡
- android - 分支 IO 深层链接自定义别名不起作用。相同的链接不在两个不同的应用程序中共享?
- zfs - 物理端口移动后 ZFS 路径不匹配