为了账号安全,请及时绑定邮箱和手机立即绑定

在 linq c# 中使用 Lambda 表达式时将 Join 转换为 GROUP JOIN

在 linq c# 中使用 Lambda 表达式时将 Join 转换为 GROUP JOIN

C#
qq_花开花谢_0 2021-06-25 17:19:36
我正在尝试将连接更改为 LEFT 外连接,但遇到各种转换错误。以下是我目前的加入,有人可以就如何在不改变此加入的实际逻辑的情况下执行此操作提供任何建议吗? BRAND_NAME_MAP_MASTER objBrandNameMap = DB.PFC_MAP_MASTERs.Join(          DB.BRAND_NAME_MAPs,          a => a.BRAND_NAME_MAP_ID, b => b.BRAND_NAME_MAP_ID,    (a, b) => new { a, b }).Where(x => x.a.BRAND_NAME_MAP_ID == BrandNameMapID &&         x.b.BRAND_NAME_MAP_ID == BrandNameMapID).Select(x => x.a).FirstOrDefault();
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

如果那是您的整个查询,您应该使用 NetMage 的答案。但是,如果您仍然需要进行左外连接,请使用以下命令:


BRAND_NAME_MAP_MASTER objBrandNameMap = DB.PFC_MAP_MASTERs.GroupJoin(

          DB.BRAND_NAME_MAPs,

          a => a.BRAND_NAME_MAP_ID, 

          b => b.BRAND_NAME_MAP_ID,

          (a, b) => new { a, b })

          .SelectMany(

          x => x.b.DefaultIfEmpty(),

          (x,y) => new { x.a, y})

.Where(x => x.a.BRAND_NAME_MAP_ID == BrandNameMapID)

.Select(x => x.a).FirstOrDefault();


查看完整回答
反对 回复 2021-06-27
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您的意图没有意义,因为您只是在获取 a。如果你只想要一个,那么就不需要左连接。虽然我已经编写了查询,它将为您提供左连接结果。您可以按照自己的方式使用它。


BRAND_NAME_MAP_MASTER objBrandNameMap = 

    (from Master in DB.PFC_MAP_MASTERs.Where(x=>x.BRAND_NAME_MAP_ID ==BrandNameMapID)

     join Map in DB.BRAND_NAME_MAPs.Where(z=>z.BRAND_NAME_MAP_ID ==BrandNameMapID)

     on Master.BRAND_NAME_MAP_ID equals Map.BRAND_NAME_MAP_ID

     into result

     from res in result.DefaultIfEmpty()

     select new {Master,res}).ToLisT()

希望能帮助到你。


查看完整回答
反对 回复 2021-06-27
  • 3 回答
  • 0 关注
  • 330 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信