【发布时间】:2018-10-04 17:54:15
【问题描述】:
我有一个使用 EF Core 的 MVC 项目。我创建了虚拟 Dto 来从我的数据库中选择逻辑查询。现在我被卡住了,我有一个方法
public IEnumerable<FinalEntity> getTest(int month,int year)
{
var dataFromSpecialPayments = _sabresRepository.GetBrokerMonthlyCommissionSpecialPayments(month, year);
var dataFromTotals = _sabresRepository.GetBrokerMonthlyCommissionTotals(month, year);
这两个变量包含了逻辑和聚合后的数据,它们的ID之间有1:1的关系(虽然另一个表中有很多没有匹配的记录,所以需要完全加入)。现在我需要将这两个实体加入到我的最终实体中。这些是 Dto 的:
public class BrokerMonthlyCommission_Total_AggDto : DtoBase
{
public int BrokerId { get; set; }
public decimal TotalCommissionAmountBruto { get; set; }
public decimal TotalCommissionAmountNeto { get; set; }
public decimal TotalDistributingFeeParticipation { get; set; }
public string BrokerName { get; set; }
public int? CommissionPaymentStatusPl { get; set; }
public int? MinCommissionForPayment { get; set; }
}
public class BrokerMonthlyCommission_SpecialPayment_AggDto
{
public int BrokerId { get; set; }
public decimal TotalSpecialPayments { get; set; }
public int PaymentStatus { get; set; }
}
public class FinalDto : DtoBase
{
public int BrokerId { get; set; }
public decimal TotalCommissionAmountBruto { get; set; }
public decimal TotalCommissionAmountNeto { get; set; }
public decimal TotalDistributingFeeParticipation { get; set; }
public string BrokerName { get; set; }
public int? CommissionPaymentStatusPl { get; set; }
public int? MinCommissionForPayment { get; set; }
public decimal TotalSpecialPayments { get; set; }
public int PaymentStatus { get; set; }
}
我该怎么做?我知道我可能可以使用 foreach 循环运行并遍历每条记录,但我正在寻找更好的解决方案
【问题讨论】:
-
你试过什么?循环一个集合,在另一个集合中找到匹配的 DTO,然后投影到
new FinalDto { X = x.X, Y = y.Y, ...}?如果您想使用数据库连接来解决此问题,您可能不得不放弃存储库方法或使用返回所需对象的方法扩展任一存储库。 -
我想过在数据库里做,但是在join之前每个表都要聚合(这是方法做的),所以linq查询对我来说变得很复杂
-
@Yossi,我编辑了我的答案以使用左连接和右连接的联合。
标签: c# entity-framework