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

时间:2017-10-29 18:56:38

标签: c# join linq-to-entities

我有两个列表需要加入才能在它们之间设置一个值。 第一个列表是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(由于任何原因),则连接运算符将返回结果 计数为companytaxesnumber且将丢失其无法加入的其他ordertaxes数据。

您是否知道即使某些数据未加入ordertaxes,我如何确保获得完整的companytaxesnumber列表?

1 个答案:

答案 0 :(得分:2)

您正在寻找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 */ };

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