如何使用连接运算符保留原始值?

How to keep original values with join operator?

我有两个列表需要加入以在它们之间设置值。 第一个列表是 companytaxesnumber,第二个是 ordertaxes。 他们都得到了一个TaxId,用来加入他们。

这是相关代码:

destination.OrderTaxes = destination.OrderTaxes.
            Join(src.companytaxesnumber, vModel => vModel.TaxId, source => source.TaxId, (dest, source) =>
            {
                  dest.LegalNumber = source.LegalNumber; return dest;
            }).ToList();

我的问题是,如果 companytaxesnumber 的数据少于 ordertaxes(出于任何原因),连接运算符将 return 结果 计数为 companytaxesnumber,并且将丢失 ordertaxes 的其他无法加入的数据。

您知道吗,即使某些数据尚未与 companytaxesnumber 合并,我如何确保获得完整的 ordertaxes 列表?

您正在寻找 LEFT OUTER JOIN,您可以通过以下方式完成任务:

var result = from o in destination.OrderTaxes
             join d in src.companytaxesnumber on o.TaxId equals d.TaxId into temp
             from p in temp.DefaultIfEmpty()
             select new { /* assign the fields appropriately */ };

a LEFT OUTER JOIN 将允许您保留第一个集合中的所有元素,而不管它在第二个集合中是否有任何相关元素。