我正在努力寻找LINQ方法的正确组合,以执行多表左连接以及一对多映射,从而形成列表和分组结果。
当前状态我有一个计划表,并与其他表结合在一起以获取获取计划列表所需的列。
var plans = await (
from ubp in db.ViewUserBusinessPlan
join bp in db.ViewBusinessPlan on ubp.BusinessPlanId equals bp.BusinessPlanId
where bp.BusinessId == businessId
select new
{
ubp.UserBusinessPlanId,
ubp.BusinessPlanId,
bp.Name,
bp.PlanGroup,
bp.BusinessId,
ubp.BusinessLocationId,
ubp.StripeSubscriptionId,
ubp.UserId,
ubp.BusinessPlanPriceCents
}
问题:现在,我需要最终获得与那些计划相关的适用税率。这存储在2个表中。
某些计划具有税率,有些则没有,因此需要LEFT JOIN类型的方案。另外,某些计划可以具有多个税率,因此我需要一个TaxRates列表。我尝试了各种Group方法,子查询和左联接。但是似乎没有什么可以将它们放在一起。
我想获得所有计划,并列出TaxRates。
您可以在select
中添加子查询以执行必要的连接:
TaxRates = db.UserBusinessPlanTaxRates.Where(ubptr => ubptr.UserBusinessPlanId == ubp.UserBusinessPlanId)
.GroupJoin(db.TaxRates, ubptr => ubptr.TaxRateId, tr => tr.TaxRateId, (ubptr, trj) => trj)
.SelectMany(trj => trj)
.ToList()
是否将其正确(或最佳地)转换为SQL取决于您所使用的数据库的LINQ。