我正在尝试从我的主表中返回一条记录,并连接到一个可能会也可能不会返回记录的辅助表。如果可能的话,我需要使用方法语法来执行此操作。
我当前的查询是
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
您需要使用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()