LINQ-左联接将RIGHT结果转换为列表

问题描述 投票:-1回答:1

我正在努力寻找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个表中。

  1. UserBusinessPlanTaxRates-(包含用户BusinessPlanId和TaxRateId的(映射表)。
  2. TaxRates-以TaxRateId为PK的TaxRate信息

某些计划具有税率,有些则没有,因此需要LEFT JOIN类型的方案。另外,某些计划可以具有多个税率,因此我需要一个TaxRates列表。我尝试了各种Group方法,子查询和左联接。但是似乎没有什么可以将它们放在一起。

我想获得所有计划,并列出TaxRates。

c# linq left-join grouping
1个回答
0
投票

您可以在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。

© www.soinside.com 2019 - 2024. All rights reserved.