我有Ilist使用实体框架核心从存储库获取所有Offer。我也有服务模型OfferResponseModel,其中包括 OfferRequestModel作为参考。我使用mapster将实体模型绑定到服务模型。然而它只设置了第一个孩子。现在我想手动绑定它。我创建了“优惠”大小的“优惠”。当我尝试使用foreach循环时,我无法设置“offers”子元素。因为它没有元素。所以,我可以解决这个问题。
var offer = await _unitOfWork.Offers.GetAllOffer();
if (offer == null)
throw ServiceExceptions.OfferNotFound;
var results = new List<OfferResponseModel>(offer.Count);
results.ForEach(c => { c.Offer = new OfferRequestModel(); });
int i = 0;
foreach(var result in results)
{
result.Offer.User = Offer[i].User.Adapt<UserResponseModel>();
result.Offer.Responsible = Offer[i].Responsible.Adapt<EmployeeResponseModel>();
result.CreatedDate = Offer[i].CreatedDate;
result.ModifiedBy = Guid.Parse(Offer[i].UpdatedBy);
result.Active = Offer[i].Status;
result.Offer = Offer[i].Offer;
result.Offer.User.Company = Offer[i].Company.Adapt<CompanyModel>();
i++;
}
答案 0 :(得分:0)
我创建了&#34;提供&#34;大小为&#34;提供&#34;。
不,您使用容量创建了它。它仍然是一个空列表。我不清楚为什么你要尝试采用这种方法 - 看起来你想要OfferResponseModel
中的每个条目offer
,直接来自那个 - 你可以使用单个LINQ查询。 (我假设此处offer
和Offer
相同。)
var results = Offer.Select(o => new OfferResponseModel
{
Offer = new OfferRequestModel
{
User = o.User.Adapt<UserResponseModel>(),
Responsible = o.Responsible.Adapt<EmployeeResponseModel>()
},
CreatedDate = o.CreatedDate,
ModifiedBy = Guid.Parse(o.UpdatedBy),
Active = o.Status
}).ToList();
这并没有在每个条目中设置Offer.User.Company
,但您的原始代码很奇怪,因为它设置了原始User
中的Responsible
和Offer
属性属性,然后将Offer
替换为Offer[i].Offer
。 (除了其他任何事情,我建议尝试使用术语&#34;提供&#34;不那么频繁 - 只需将复数改为&#34;提供&#34;会有所帮助。)
我怀疑通过上面概述的方法,您将能够找到您想要的东西,并且无论如何都能更清楚地表达出来。你绝对不需要采取&#34;多重循环&#34;你的原始代码的方法。
答案 1 :(得分:0)
您遗漏的一件事是代码中引用的offer
变量的类型。但我认为你需要做这些事情:
if (offer == null)
throw ServiceExceptions.OfferNotFound;
var results = offer.Select(o => new OfferResponseModel
{
Offer = new OfferRequestModel
{
User = o.User.Adapt<UserResponseModel>(),
Responsible = o.Responsible.Adapt<EmployeeResponseModel>(),
...
}
}).ToList();
Select
基本上遍历offer
中的所有项目并将其“转换”为其他对象,在本例中为OfferResponseModel
。所以在里面选择你只是新建一个OfferResponseModel并直接设置你需要设置的所有属性。
您需要using System.Linq;
才能选择此选项。