gpt4 book ai didi

c# - 加入不返回左表 C# lambda 中的所有元素

转载 作者:太空狗 更新时间:2023-10-30 00:41:36 25 4
gpt4 key购买 nike

我有 2 个表,左边的表有这样的数据:

enter image description here

我使用以下表达式与另一个表进行左连接:

 var result = posicion.Join(fact,
p => p.Cod_articulo,
f => f.Cod_articulo,
(p, f) => new { p.Posicion, p.Cant_historico,
p.Cod_articulo, f.Cantidad_facturada });

问题是结果不包括左表中的某些项目,如下所示:

enter image description here

正如您在结果中看到的,位置 3、6 等没有数据。我的连接会缺少什么?

最佳答案

您需要进行组加入(即 Linq 中的左加入)。最好使用查询语法:

from p in posicion
join f in fact
on p.Cod_articulo equals f.Cod_articulo into g // GroupJoin
from pf in g.DefaultIfEmpty()
select new {
p.Posicion,
p.Cant_historico,
p.Cod_articulo,
Cantidad_facturada = (pf == null) ? null : pf.Cantidad_facturada
}

此查询选择与位置 p 对应的所有事实到组 g 中。然后我们从每个组中选择结果,即使当前位置没有相应的事实(即 DefaultIfEmpty 情况)。

Lambda 语法的可读性将大大降低:

posicion.GroupJoin(fact,
p => p.Cod_articulo,
f => f.Cod_articulo,
(p, g) => new { p, g })
.SelectMany(x => x.g.DefaultIfEmpty(), (x, pf) => new {
x.p.Posicion,
x.p.Cant_historico,
x.p.Cod_articulo,
Cantidad_facturada = (pf == null) ? null : pf.Cantidad_facturada
});

还请考虑阅读这篇 MSDN 文章:How to: Perform Left Outer Joins

关于c# - 加入不返回左表 C# lambda 中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com