Linq to Entity,使用方法语法从左表和右表的0或1返回记录?

问题描述 投票:0回答:1

我正在尝试从我的主表中返回一条记录,并连接到一个可能会也可能不会返回记录的辅助表。如果可能的话,我需要使用方法语法来执行此操作。

我当前的查询是

 Organizations.Where(a=>a.OrganizationId==10033)
        .Join(Addresses, org => org.ClientId, addy => addy.ClientId, (org, addy) => new { org, addy })
        .Join(Contacts, o => o.org.OwnerClientId, c => c.ClientId, (o, c) => new { o, c })
        .Select(a => new Establishment
        {
            Name = a.o.org.Name,
            City = a.o.addy.PhysicalAddressCity,
            State = a.o.addy.PhysicalAddressState,
            Id = Convert.ToInt32(a.o.org.OrganizationId),
            AddressLine = a.o.addy.PhysicalAddressLine,
            ZipCode = a.o.addy.PhysicalFullPostal,
            AssignedInspector = "Jacques Clouseau",
            ManagerName = a.c.LastName
            }).FirstOrDefault()

如果联系人表中有匹配的记录,这将返回正确的信息,但是即使没有联系人,我也需要它来返回组织和地址。

使用方法语法可以吗?

*****附加说明:

忘记提及这是使用EF Core 3.0

c# entity-framework linq linq-to-entities
1个回答
0
投票

您需要使用GroupJoin:

Organizations.Where(a=>a.OrganizationId==10033)
        .Join(Addresses, org => org.ClientId, addy => addy.ClientId, (org, addy) => new { org, addy })
        .GroupJoin(Contacts, o => o.org.OwnerClientId, c => c.ClientId, (o, contact) => new { o, c = contact.FirstOrDefault() })
        .Select(a => new Establishment
        {
            Name = a.o.org.Name,
            City = a.o.addy.PhysicalAddressCity,
            State = a.o.addy.PhysicalAddressState,
            Id = Convert.ToInt32(a.o.org.OrganizationId),
            AddressLine = a.o.addy.PhysicalAddressLine,
            ZipCode = a.o.addy.PhysicalFullPostal,
            AssignedInspector = "Jacques Clouseau",
            ManagerName = a.c.LastName
            }).FirstOrDefault()
© www.soinside.com 2019 - 2024. All rights reserved.