[英]Convert Join to GROUP JOIN while using Lambda expression in linq c#
我正在尝试将联接更改为左外部联接,但遇到各种转换错误。 以下是我当前的联接,在不更改此联接的实际逻辑的情况下,有人可以提出任何建议吗?
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();
由于最终只保留a
到左连接意味着不关心b
是否匹配,因此结果是:
BRAND_NAME_MAP_MASTER objBrandNameMap = DB.PFC_MAP_MASTERs
.Where(a => a.BRAND_NAME_MAP_ID == BrandNameMapID)
.FirstOrDefault();
如果那是您的整个查询,则应使用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();
您的意图没有意义,因为您只在获取a。 如果只需要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()
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.